存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]
示例 2:
输入:head = [1,1,1,2,3] 输出:[2,3]
提示:
- 链表中节点数目在范围
[0, 300]
内 -100 <= Node.val <= 100
- 题目数据保证链表已经按升序排列
Related Topics
题解
和之前一题LeetCode刷题 【83】 删除排序链表中的重复元素略有不同,这次需要删除的不再是多余的重复元素,而是所有有重复元素的都删除,只留下在原来链表中只出现过一次的节点。
和官方题解思路有点点点不一样的地方。。
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode fakeHead = new ListNode();
ListNode fakeCurrent = fakeHead;
ListNode current = head;
int sameVal;
while (null != current){
if (current.next!=null && current.val == current.next.val){
sameVal = current.val;
while (null!=current && current.val == sameVal){
current = current.next;
}
}else{
fakeCurrent.next = current;
current = current.next;
fakeCurrent = fakeCurrent.next;
}
}
fakeCurrent.next = null;
return fakeHead.next;
}
}
新建了一个fakeHead,和对应这个fakeHead往后遍历的fakeCurrent,然后在遍历原链表的时候,用这个fakeCurrent串起来需要的不重复的节点,最终需要把fakeCurrent的next置空。串珠子的意思。。。
发表评论