删除链表中的重复元素

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指向的重复元素。

经验分享 程序员 微信小程序 职场和发展