原題
解題思路
利用兩個節點node1與node2進行遍歷,node2是node1的後驅節點
if(node1.next.val == node2.next.val) 那麼此時存在重複的節點,
記錄下此值val,將node1之後的所有值爲val的節點刪除;
else
node1與node2前進1步;
通過一次遍歷可以將鏈表中重複的元素刪除完畢。
圖解
代碼
public class Solution82 {
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode node1 = dummy;
ListNode node2 = dummy.next;
while (node2 != null && node2.next != null){
if (node1.next.val == node2.next.val){
int val = node1.next.val;
while (node1.next != null && node1.next.val == val){
node1.next = node2.next;
node2 = node1.next;
}
}
else {
node1 = node2;
node2 = node1.next;
}
}
return dummy.next;
}
}