删除链表中的重复元素
1.删除排序链表中的重复元素
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例一:
输入:head = [1,1,2] 输出:[1,2]
示例二:
输入:head = [1,1,2,3,3] 输出:[1,2,3]
解题思路:
1.找到多个相邻节点的值是相同的,及是比较prev和cur(prev下一个节点)的节点值的情况。
2.找到重复元素后,重复元素保留一次,及保留第一个重复元素,prev指向的是第一个重复节点,删除cur对应的节点,保留prev。
3.当cur为空时判断终止。
/**
* 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 dummyHead = new ListNode(101);
dummyHead.next = head;
ListNode prev = dummyHead;
ListNode cur = prev.next;
while (cur != null){
if (prev.val != cur.val){
prev = prev.next;
}else {
//此时cur是要删除的元素
prev.next = cur.next;
}
cur = cur.next;
}
return dummyHead.next;
}
}
注意:删除的始终是cur指向的重复元素。
