Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
Subscribe to see which companies asked this question
这道题采用的是双指针的办法解的。是自己写出来的,所以更加需要好好记录一下。之前的思路是将重复的点全部删除,这样的话需要添加一个变量表示上一次消除的元素的val是多少,然而参考了下另一种思路,如果当前位置跟它下一个元素的值相等,先不删除当前元素,只删除后面的元素,直至后面的元素跟当前元素不想等,再删除掉当前元素就可以了。
代码:
public ListNode deleteDuplicates(ListNode head) {
if(head == null) return null;
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode pre = dummy;
ListNode cur = head;
while(cur != null && cur.next != null){
if(cur.val != cur.next.val){
pre = cur;
cur = cur.next;
continue;
}
while(cur != null && cur.next != null && cur.val == cur.next.val){
cur.next = cur.next.next;
}
pre.next = cur.next;//删除当前元素
cur = pre.next;//这里是为了更新cur的位置,pre保持不变,只有在cur.val != cur.next.val的时候pre才会往前走
}
return dummy.next;
}
sfadff