~cpp
import java.io.*;
class Node
{
private int ndata;
public Node pNext=null;
public Node(int ndata)
{
this.ndata=ndata;
}
public int getData()
{
return ndata;
}
}
class MyLinkedList
{
private Node pHead;
private Node pTail=null;
private static int nNumber=0;
public MyLinkedList()
{
pHead=new Node(0);
}
public void insertNode(int ndata,int nSequence)
{
Node pNew=new Node(ndata);
if(nNumber==0)
pHead.pNext=pNew;
Node pTemp=new Node(0);
pTemp=pHead;
for(int i=0;i<nSequence;i++)
pTemp=pTemp.pNext;
pNew.pNext=pTemp.pNext;
pTemp.pNext=pNew;
nNumber++;
}
public boolean deleteNode(int nSequence)
{
if(nNumber<nSequence)
{
System.out.println("저장된 데이터양을 초과하는 인덱스입니다!");
return false;
}
Node pTemp=new Node(0);
Node pTemp2=new Node(0);
pTemp=pHead;
for(int i=0;i<nSequence-1;i++)
pTemp=pTemp.pNext;
pTemp2=pTemp.pNext;
pTemp.pNext=pTemp2.pNext;
nNumber--;
return true;
}
public void showData()
{
Node pTemp=new Node(0);
pTemp=pHead;
int data;
if(nNumber==0)
System.out.println("저장된 데이터가 없습니다!");
for(int i=0;i<nNumber;i++)
{
pTemp=pTemp.pNext;
data=pTemp.getData();
System.out.println(data);
}
}
public void showMenu()
{
System.out.println("1. Add");
System.out.println("2. Delete");
System.out.println("3. Show");
System.out.println("4. End");
System.out.print("Select the Menu : ");
}
public static void main(String args[])
{
MyLinkedList ll=new MyLinkedList();
/// 이부분에 메뉴를 넣든 함수 호출을 하든 마음대로..
}
}
- 뭔가 굉장히 이상하군요..
; 제가 봐도..
굉장히 조잡하고 굉장히 허접한.. 그런 이상한 코드 같습니다.; 자바는 첨이라서 그런가..;
- LinkedList가 종단 부분에서만 추가,삭제가 되는게 아닌 아무데서나 되야 하더군여. 그래서 그걸 어떻게 정해줄까 고민하다가 데이터의 순서로 하기로 했습니다.
= 자바로 짠 링크드 리스트..2 (누가 한걸까) 상협인가?=
~cpp
소드 다 적으면 아무도 안볼거 같아서..
인터페이스와 개략적인 알고리즘만 적겠습니다.
제가 자바로 링크드 리스트 짤때 제일 고민한 점이 노드를 추가할때마다
전체 노드의 크기가 바뀌는 점을 고민 많이 했습니다.
그래서 한것이 노드를 추가할때마다 전체 노드를 다시 만드는 것이었습니다.
(자바의 Vector 클래스에서 이렇게 했다고 얼핏 듣어서...)
===> 그 작업이 아래에 있습니다.
boolean Add_ToSpecial(int coordi, int in) //특정한 위치에 자료를 저장하는 메소드
{
if(coordi <0 || coordi >= m_Node.length) //좌표는 0부터 시작됨, 입력 위치가 해당 범위를 벋어날 경우
return false;
Node tempNode[] = new Node[m_Node.length+1]; //m_Node에 하나의 자료를 더 넣기 위해서 이보다
//하나의 공간이 더 많은 임시 배열을 생성한다.
for(int i=0;i<tempNode.length-1 && i<coordi;i++) //tempNode에 m_Node를 우선 coordi번째(0부터 시작해서) 전의 자리
tempNode[i] = m_Node[i]; //까지 복사 한다.
Node tem = new Node(); //임시 노드 생성
tem.item = in;
tem.next = m_Node[coordi]; //낀 곳에 원래 있었던 자료를 참조한다.
tempNode[coordi] = tem;
tempNode[coordi-1].next = tempNode[coordi]; //낀 곳의 바로 앞에 있는 자료가 첨가한 자료를 참조하게 한다.
for(int j = coordi+1; j<tempNode.length-1;j++)
tempNode[j] = m_Node[j-1];
m_Node = new Node[tempNode.length]; // m_Node의 크기를 늘린후 tempNode를 넣는다.
for(int i=0;i<tempNode.length;i++) // m_Node 에 tempNode를 복사한다.
m_Node[i] = tempNode[i];
return true;
}
//////////////////////////
//노드 클래스 모습과 인터페이스
class Node { //Node 클래스
public int item;
public Node next;
}
void Add_ToFront(int n)
void Add_ToRear(int n)
boolean Add_ToSpecial(int coordi, int in)
boolean IsEmpty()
boolean Delete_Front()
boolean Delete_Rear()
boolean Delete_Special(int coordi)
void PrintAll()