力扣链接
82. 删除排序链表中的重复元素 II - 力扣(LeetCode)
题目描述
给定一个已排序的链表的头 head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
解题思路
设置l1,l2,l3分别指向当前结点的前一个结点,当前结点,当前结点的后一个结点,遍历链表进行判断当前结点的值和下一个结点的值是否相等,如果相等则将l3向下遍历,直到与当前节点的值不一样,进行删除操作,将当前结点的前一个结点的next指向l3,当前结点指向l3,l3向下移动一个结点。如果不相等则依次向后移动一个结点,直到遍历结束。
解题代码
/**
* 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) {
if (head == null)
return head;
if (head.next == null)
return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode l1 = dummy;
ListNode l2 = head;
ListNode l3 = l2.next;
while (l3 != null) {
if (l2.val == l3.val) {
while (l2.val == l3.val) {
l3 = l3.next;
if (l3 == null)
break;
}
l1.next = l3;
l2 = l3;
if (l3 != null)
l3 = l3.next;
} else {
l1 = l1.next;
l2 = l2.next;
l3 = l3.next;
}
}
return dummy.next;
}
}