public void Remove(SingleLinkedListNode <T> removeNode) { if (head == null || removeNode == null) { return; } // 삭제할 노드가 첫 노드면 if (removeNode == head) { head = head.Next; removeNode = null; } else { var current = head; // 단방향이므로 삭제할 노드의 바로 이전 노드를 검색해야 함 while (current != null && current.Next != removeNode) { current = current.Next; } if (current != null) { // 이전 노드의 Next에 삭제노드의 Next를 할당 current.Next = removeNode.Next; removeNode = null; } } }
// CurrentNode - NextNode => CurrentNode - NewNode - NextNode로 변환 public void AddAfter(SingleLinkedListNode <T> current, SingleLinkedListNode <T> newNode) { if (head == null || current == null || newNode == null) { throw new InvalidOperationException(); } newNode.Next = current.Next; current.Next = newNode; }
// 새 노드를 추가하는 Add() 매서드 public void Add(SingleLinkedListNode <T> newNode) { // 리스트가 비어있다면... if (head == null) { head = newNode; } else { var current = head; while (current != null && current.Next != null) { current = current.Next; } current.Next = newNode; } }
public SingleLinkedListNode(T data) { this.Data = data; this.Next = null; }