为了简化处理链表边界条件而引入的附加链表结点,哨兵节点通常位于链表头部,它的值没有任何意义,在一个有哨兵节点的链表中,从第二个节点开始才真正保存有意义的信息。
具体作用看代码和注释:
public class ListNode {public int val;public ListNode next;public ListNode(int val) {this.val = val;}@Overridepublic String toString() {return "ListNode{" +"val=" + val +", next=" + next +'}';}
}
public class Sentry {public ListNode append1(ListNode head,int value){ListNode newNode = new ListNode(value);if (head==null){return newNode;}ListNode node = head;while (node.next !=null){node = node.next;}node.next = newNode;return head;}
public ListNode append2(ListNode head,int value){ListNode dummy = new ListNode(0);dummy.next = head;ListNode newNode= new ListNode(value);ListNode node = dummy;while (node.next !=null){node = node.next;}node.next = newNode;return dummy.next;}public ListNode delete1(ListNode head,int value){if (head == null){return head;}if (head.val == value){return head.next;}ListNode node = head;while (node.next != null){if (node.next.val == value){node.next = node.next.next;break;}node = node.next;}return head;}public ListNode delete2(ListNode head,int value){ListNode dummpy = new ListNode(0);dummpy.next = head;ListNode node = dummpy;while (node.next != null){if (node.next.val == value){node.next = node.next.next;break;}node = node.next;}return dummpy.next;}}