c++如何删除链表中重复节点

发布时间:2022-03-17 16:01:57 作者:iii
来源:亿速云 阅读:472

本篇内容主要讲解“c++如何删除链表中重复节点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c++如何删除链表中重复节点”吧!

算法:

核心点在于如何找到重复节点,有序链表的话,只要下一个节点与当前节点数值一样就是重复节点,直接将当前节点指向下一个节点的下一个节点即可。

题目1:删除排序链表中的重复元素

代码实现:

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func deleteDuplicates(head *ListNode) *ListNode {    curr := head    for curr != nil && curr.Next != nil  {                if curr.Val == curr.Next.Val { // 删除重复节点,node            tmp := curr.Next            curr.Next = tmp.Next        } else { // 不是重复节点的话,移动节点            curr = curr.Next        }        }    return head}

题目2: 删除排序链表中的重复元素

代码实现

// 算法:与题目1的不同之处在于,本题目是删除所有重复的节点,// 也就是说不单单要找到重复节点的位置,// 还需要将第一个重复节点的前一个节点记录下来,这里叫做pre// 然后通过pre.Next去指向重复节点的后面哪一个不重复的节点,来完成删除。// 涉及到前序节点pre,就需要考虑哨兵节点。/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func deleteDuplicates(head *ListNode) *ListNode {    if head == nil || head.Next == nil {        return head    }    n := new(ListNode) // 设置钩子节点,避免头节点都被删除不好操作    n.Next = head    pre := n    for pre != nil { // pre是当前节点的前一个节点        if pre.Next == nil {            break        }
       curr := pre.Next        next := curr.Next        for next != nil { // 比较重复的节点            if next.Val != curr.Val {                break            }            next = next.Next        }
       if curr.Next == next {            pre = pre.Next        } else { // 重复的,删除重复节点            pre.Next = next        }    }    return n.Next}

到此,相信大家对“c++如何删除链表中重复节点”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. leetcode--删除链表中的节点
  2. 链表节点的删除(删除重复无序节点)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:c++怎么定义树的高度

下一篇:c++如何合并有序链表

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》