删除链表中的重复元素
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指向的重复元素。