赞
踩
虚拟(哑)节点(dummy node)
在链表的操作中,添加一个哑节点(dummy)
,让它的指针指向链表的头节点。
ListNode dummy = new ListNode(val, head);
return dummy.next;
好处:
省略头节点为空时的情况的判断
;头节点和其他节点进行同样的操作时,由于头节点没有前一个节点,需要对这种情况进行单独判断,但加入虚拟节点以后,头节点就可以当作普通节点看待
。eg1:leetcode–203.移除链表的元素
203.移除链表的元素
示例2属于头节点为空的情况;示例3属于要删除头节点的情况。如果不加入虚拟节点,这两种情况都需要单独考虑,加入虚拟节点就不一样了。
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(1, head); //在头节点前加入虚拟节点
ListNode temp = dummy;
while (temp.next != null) {
if (temp.next.val == val)
temp.next = temp.next.next;
else
temp = temp.next;
}
return dummy.next;
}
}
说明:
ListNode dummy = new ListNode(); //虚拟节点的值默认为0
dummy.next = head;
dummy.next
。eg2:leetcode–82. 删除排序链表中的重复元素 II
82. 删除排序链表中的重复元素 II
class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode dummy = new ListNode(-101,head); ListNode cur = dummy; while (cur.next != null && cur.next.next != null) { if (cur.next.val != cur.next.next.val) { cur = cur.next; } else { int number = cur.next.val; cur.next = cur.next.next.next; while (cur.next != null && (cur.next.val == number)) { cur.next = cur.next.next; } } } return dummy.next; } }
说明:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。