【leetcode】Remove Duplicates from Sorted List II (middle)

时间:2022-09-17 10:29:17

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

思路:

常规思路,关键点:用伪头部避免新建链表头的麻烦。

ListNode *deleteDuplicates2(ListNode *head) {
if(head == NULL || head->next == NULL) return head;
ListNode fakehead(); //伪头结点 避免头结点建立的好方法
ListNode * newtail = &fakehead;
ListNode * p = head;
int preval = head->val + ; //记录前面结点的值 初始化为一个跟头结点值不同的数 while(p != NULL)
{
if(p->val == preval) //数字出现过
{
p = p->next;
}
else //新数字
{
preval = p->val;
if(p->next != NULL && p->next->val == preval) //新数字的下一个数字还是这个数 跳过
{
p = p->next->next;
}
else //如果确定是一个独立的数字
{
newtail->next = p;
p = p->next;
newtail = newtail->next;
newtail->next = NULL;
}
}
}
return fakehead.next;
}

大神不需要伪头部的方法,利用了指针的地址。直接更改地址里面放的指针。

 class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
ListNode** p = &head;
while(*p && (*p)->next) {
ListNode* p1 = *p, *p2 = p1->next;
while(p2 && p2->val == p1->val) { //直接循环到下个数字出现的位置
p2 = p2->next;
}
if(p2 != p1->next) {
*p = p2;
} else {
p = &(p1->next);
}
}
return head;
}
};

【leetcode】Remove Duplicates from Sorted List II (middle)的更多相关文章

  1. 【leetcode】Search in Rotated Sorted Array II(middle)☆

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  2. 【leetcode】Remove Duplicates from Sorted Array II

    Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...

  3. 【Leetcode】Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  4. 【链表】Remove Duplicates from Sorted List II(三指针)

    题目: Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct  ...

  5. 【LeetCode】Search in Rotated Sorted Array II(转)

    原文链接 http://oj.leetcode.com/problems/search-in-rotated-sorted-array-ii/ http://blog.csdn.net/linhuan ...

  6. 【leetcode】Remove Duplicates from Sorted Array I & II(middle)

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  7. 【Leetcode】【Medium】Remove Duplicates from Sorted Array II

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...

  8. 【数组】Remove Duplicates from Sorted Array II

    题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...

  9. LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)

    Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...

随机推荐

  1. QT 网络编程

    #include "networkinformation.h" #include "ui_networkinformation.h" networkinform ...

  2. 使用JavaScript访问子节点方法elementNode.childNodes时,需要注意的地方

    有这样一个HTML结构 <div> javascript <p>javascript</p> <div>jQuery</div> <h ...

  3. SRM 588 DIV1

    250 题意:有n首不同的曲子,你唱每首曲子需要花费a的时间以及一个调整的时间b,调整的时间为此首歌的曲调减去上一首歌的曲调的绝对值. 思路:我们用dp[i][k]表示前i首歌只唱k首用的最小时间花费 ...

  4. 浅谈IT员工管理

    本人尽管还不是管理人员,但也管理过学弟们(不是同校.仅仅是工作中同事,为了好称呼叫学弟).也被管理着,工作也好多年了.今天又感而发.想来谈谈假设管理好员工(在此声明,我仅仅是发表个人意见哦.不要喷.哈 ...

  5. git&colon; command not found

    在使用git时,出现“git: command not found”的情况,于是使用yum安装: [root@localhost ~]# yum install -y gitLoaded plugin ...

  6. Spring3&period;2AOP实现需要添加的三个包

    Spring3.2AOP实现需要添加的三个包 http://down.51cto.com/data/1001395 http://down.51cto.com/data/519542

  7. Java NIO学习笔记 NIO选择器

    Java NIO选择器 A Selector是一个Java NIO组件,可以检查一个或多个NIO通道,并确定哪些通道已准备就绪,例如读取或写入.这样一个线程可以管理多个通道,从而管理多个网络连接. 为 ...

  8. Java Lucene入门

    1.lucene版本:7.2.1 pom文件: <?xml version="1.0" encoding="UTF-8"?> <project ...

  9. 设计模式学习心得&lt&semi;外观模式 Facade&gt&semi;

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  10. JAVA常用设计模式&lpar;一、单例模式、工厂模式&rpar;

    JAVA设计模式之单例模式 import java.util.HashMap; import java.util.Map; /** * 设计模式之单例模式 * 单例模式(Singleton Patte ...