删除链表中重复的结点

举报
bug郭 发表于 2022/11/30 17:11:57 2022/11/30
【摘要】 大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流作者简介:CSDN java领域新星创作者blog.csdn.net/bug…掘金LV3用户 juejin.cn/user/bug…阿里云社区专家博主,星级博主,...

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

删除链表中重复的结点

题目链接:删除链表中重复的结点

在这里插入图片描述
题目分析:

  • 这里要求时间复杂度和空间复杂度都是O(n),所以这里的方法有很多!
  • 可以借助其他数据结构进行去重,然后再次进行链接,返回头结点即可!
  • 我们这里通过指针进行遍历原地去重,因为这里结点有序!
    在这里插入图片描述

java

public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if(pHead==null||pHead.next==null) return null;
        ListNode res = new ListNode(-1);
        res.next = pHead;
        ListNode cur = res;
        while(cur.next!=null&&cur.next.next!=null){
            //遇到相邻两个节点值相同直接删除!
            if(cur.next.val==cur.next.next.val){
                int tmp = cur.next.val;
                //跳过!
                while(cur.next!=null&&cur.next.val==tmp){
                    cur.next = cur.next.next;
                }
            }else{
                cur = cur.next;
            }
        }
        return res.next;
    }
}

python

class Solution:
    def deleteDuplication(self , pHead: ListNode) -> ListNode:
        # write code here
        res = ListNode(-1)
        res.next = pHead
        cur = res
        while cur.next!=None and cur.next.next!=None:
            if cur.next.val==cur.next.next.val:
                #去重!
                val = cur.next.val
                while cur.next!=None and cur.next.val == val:
                    cur.next = cur.next.next
            else:
                cur = cur.next
        return res.next

删除链表的节点

题目链接:删除链表的节点
在这里插入图片描述
题目分析:

  • 这就是简单的删除节点!我们只需要遍历,然后找到该节点进行删除即可!

java

 public ListNode deleteNode (ListNode head, int val) {
        // write code here
        ListNode res = new ListNode(-1);
        res.next = head;
        ListNode cur = res;
        while(cur.next!=null){
            if(cur.next.val==val){
                cur.next = cur.next.next;
            }else{
                cur = cur.next;
            }
        }
        return res.next;
    }

python

class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        res = ListNode(-1)
        res.next = head
        cur = res
        while cur.next:
            if cur.next.val==val:
                cur.next = cur.next.next
            else:
                cur = cur.next
        return res.next
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。