LeetCode82.删除排序链表中的重复元素II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现的数字。 返回同样按升序排列的结果链表。
题解
遍历:时间复杂度
这道题目借鉴到了双指针算法的思想,我们先找到一个结点 ,然后找到 的下一个节点和下下一个节点 ,作为双指针进行比较,如果他们的值相同,则向后移动一位。找到相同节点的链表长度,若大于1则删除。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode p = dummy;
while (p.next != null) {
ListNode q = p.next.next;
while (q != null && q.val == p.next.val) q = q.next;
if (p.next.next == q) p = p.next;
else p.next = q;
}
return dummy.next;
}
}