题解 | #删除有序链表中重复的元素-I#

删除有序链表中重复的元素-I

http://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79

题目主要信息:

  • 给定一个从小到大排好序的链表
  • 删去链表中重复的元素,每个值只留下一个节点

具体思路:

既然相同的元素只留下一个,我们留下哪一个最好呢?当然是遇到的第一个元素了!因为第一个元素直接就与前面的链表节点连接好了,前面就不用管了,只需要跳过后面重复的元素,连接第一个不重复的元素就可以了,在链表中连接后面的元素总比连接前面的元素更方便嘛,因为不能逆序访问。

  • step 1:判断链表是否为空链表,空链表不处理直接返回。
  • step 2:使用一个指针遍历链表,如果指针当前节点与下一个节点的值相同,我们就跳过下一个节点,当前节点直接连接下个节点的后一位。
  • step 3:如果当前节点与下一个节点值不同,继续往后遍历。
  • step 4:循环过程中每次用到了两个节点值,要检查连续两个节点是否为空。

具体过程如下图所示: alt

代码实现:

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head == NULL) //空链表
            return NULL;
        ListNode* cur = head; //遍历指针
        while(cur != NULL && cur->next != NULL){ //指针当前和下一位不为空
            if(cur->val == cur->next->val) //如果当前与下一位相等则忽略下一位
                cur->next = cur->next->next;
            else //否则指针正常遍历
                cur = cur->next;
        }
        return head;
    }
};

复杂度分析:

  • 时间复杂度:O(n)O(n),其中nn为链表长度,遍历一次链表
  • 空间复杂度:O(1)O(1)
孤帆远影碧空尽 文章被收录于专栏

牛客网各类题单题解~

全部评论

相关推荐

点赞 收藏 评论
分享
正在热议
# 牛客帮帮团来啦!有问必答 #
1152954次浏览 17157人参与
# 通信和硬件还有转码的必要吗 #
11237次浏览 101人参与
# 不去互联网可以去金融科技 #
20741次浏览 259人参与
# 和牛牛一起刷题打卡 #
19098次浏览 1635人参与
# 实习与准备秋招该如何平衡 #
203508次浏览 3628人参与
# 大厂无回复,继续等待还是奔赴小厂 #
5003次浏览 32人参与
# OPPO开奖 #
19322次浏览 268人参与
# 通信硬件薪资爆料 #
266071次浏览 2484人参与
# 国企是理工四大天坑的最好选择吗 #
2236次浏览 34人参与
# 互联网公司评价 #
97747次浏览 1280人参与
# 简历无回复,你会继续海投还是优化再投? #
25041次浏览 354人参与
# 0offer是寒冬太冷还是我太菜 #
454973次浏览 5125人参与
# 国企和大厂硬件兄弟怎么选? #
53928次浏览 1013人参与
# 参加过提前批的机械人,你们还参加秋招么 #
14648次浏览 349人参与
# 硬件人的简历怎么写 #
82299次浏览 852人参与
# 面试被问第一学历差时该怎么回答 #
19413次浏览 213人参与
# 你见过最离谱的招聘要求是什么? #
28499次浏览 248人参与
# 学历对求职的影响 #
161281次浏览 1804人参与
# 你收到了团子的OC了吗 #
538878次浏览 6389人参与
# 你已经投递多少份简历了 #
344334次浏览 4963人参与
# 实习生应该准时下班吗 #
97027次浏览 722人参与
# 听劝,我这个简历该怎么改? #
63530次浏览 622人参与
牛客网
牛客企业服务