๐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
๐ฌ ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- LinkedList์ ๊ฒฝ์ฐ ArrayList์ ๋ค๋ฅธ๊ฒ ๋
ธ๋๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ด์ฉ
- ๋
ธ๋๊ฐ ํ๋์ ๋งํฌ ํ๋์ ์ํด ๋ค์ ๋
ธ๋์ ์ฐ๊ฒฐ๋๋ ๊ตฌ์กฐ
- ๋จ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ ๋ ๋ฆฌ์คํธ
- ํค๋๊ฐ ๊ฐ์ฅ ์์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ , ๋งํฌ ํ๋๊ฐ ์ฐ์์ ์ผ๋ก ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํด
- ์ต์ข
์ ์ผ๋ก
null
์ ๊ฐ๋ฆฌํค๋ ๋
ธ๋๊ฐ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋
ธ๋
โพ ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋จ์
- ํ๋ฒ ์ํํ๋ฉด ์ด์ ๋
ธ๋๋ก ๋์๊ฐ๋ ๊ฒ ๋ถ๊ฐ๋ฅ
- ์ํ๋ ๋
ธ๋๋ฅผ ์ง๋์ณค๋ค๋ฉด ์ฒ์๋ถํฐ ๋ค์ ์ํ
๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ

- ๋
ธ๋: ์์ ์ ๋ฐ์ดํฐ + ๋ค์ ๋
ธ๋์ ์ฃผ์๊ฐ ํํ
โพ ๊ตฌํ
๋
ธ๋
class Node {
public int data;
public Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
Main Class
์ด๊ธฐ ์ธํ
private final static int MAX_NODE = 10000;
private Node[] node = new Node[MAX_NODE];
private int nodeCnt = 0;
private Node head;
public Node getNode(int data) {
node[nodeCnt] = new Node(data);
return node[nodeCnt++];
}
public void init() {
head = null;
}
head ์ฝ์
- ๋ง์ฝ ํค๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, ์ ๋ฌ๋ data๊ฐ ํค๋
- ์ด๋ฏธ ํค๋๊ฐ ์กด์ฌํ๋ค๋ฉด, ์๋ก์ด ๋
ธ๋๊ฐ ํ์ฌ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํจ
public void addNode2Head(int data) {
if (head == null) {
head = getNode(data);
return;
}
Node nHead = getNode(data);
nHead.next = head;
head = nHead;
}
tail ์ฝ์
- ๋ง์ฝ ํค๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด, ์ ๋ฌ๋ data๊ฐ ํค๋
- ํค๋๋ถํฐ ์ํํด์ ๋ง์ง๋ง ๋
ธ๋ ์ฐพ์ ํ ์๋ก์ด ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํจ
public void addNode2Tail(int data) {
if (head == null) {
head = getNode(data);
return;
}
Node curNode = head;
while (curNode.next != null) {
curNode = curNode.next;
}
Node nTail = getNode(data);
curNode.next = nTail;
}
ํด๋น data๋ฅผ num๋ฒ์งธ์ ์ฝ์
- num๋ฒ์งธ์ ๋
ธ๋ ์ฐพ์ ํ ์ด์ ๋
ธ๋๋ ์๋ก์ด ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํจ
- ๊ทธ๋ฆฌ๊ณ ์๋ก์ด ๋
ธ๋๋ ๊ธฐ์กด num๋ฒ์งธ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํจ
public void addNode2Num(int data, int num) {
if (head == null) {
head = getNode(data);
return;
}
if (num == 1) {
addNode2Head(data);
return;
}
Node curNode = head;
Node preNode = null;
int cnt = 1;
while (true) {
if (cnt == num - 1) {
if (curNode == null) {
addNode2Tail(data);
return;
}
preNode = curNode;
curNode = curNode.next;
break;
}
curNode = curNode.next;
cnt++;
}
Node nNode = getNode(data);
preNode.next = nNode;
nNode.next = curNode;
}
ํด๋น data๊ฐ ์๋ ๋
ธ๋ ์ญ์
- ํด๋น ๋
ธ๋ ์ฐพ์ ํ ํด๋น ๋
ธ๋์ ์ด์ ๋
ธ๋๊ฐ ํด๋น ๋
ธ๋์ ๋ค์ ๋
ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํจ
- ๋ง์ฝ ํด๋น data๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋
ธ๋๊ฐ ์๋ค๋ฉด return
public void removeNode(int data) {
if (head.data == data) {
head = head.next;
return;
}
Node curNode = head;
Node preNode = null;
Node nextNode = null;
while (true) {
if (curNode == null)
return;
if (curNode.data == data) {
nextNode = curNode.next;
break;
}
preNode = curNode;
curNode = curNode.next;
}
preNode.next = nextNode;
}
๐ฌ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๋จ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ํ์
- ๋ค์ ๋
ธ๋ ๋ฟ ์๋๋ผ ์ด์ ๋
ธ๋์ ์ฐธ์กฐ๊น์ง ์ถ๊ฐ
- ์๋ฐฉํฅ ํ์ ๊ฐ๋ฅํด ๊ฒ์ ์๋๊ฐ ํฅ์๋จ
