P74 有序链表删除重复节点
算法 17 阅读
信号摘要
难度:Medium · 时长:03:51 · leetcode 82 · lintcode 113
未对外公开播放权限
点击查看说明
描述
这个题目说的是,给你一个单链表,这个单链表节点上的数字是有序的。对于出现多次的数字,你要把它们全删掉,留下只出现一次的节点,最后返回处理后的单链表。
比如说,给你的有序单链表是:1 -> 1 -> 2 -> 4
1 出现了多次,删掉它后,你要返回的链表是:
2 -> 4
代码
public class AlgoCasts {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
// Time: O(n), Space: O(1)
public ListNode removeDuplicatesInSortedList(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode prev = dummy, cur = prev.next;
while (cur != null) {
while (cur.next != null && cur.val == cur.next.val) cur = cur.next;
// update prev
if (prev.next != cur) prev.next = cur.next;
else prev = prev.next;
// update cur
cur = prev.next;
}
return dummy.next;
}
}