删除单向链表中的重复节点

题目:

在一个排序(保证重复节点连在一块)的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。如 输入链表:1->2->3->3->4->4->5 ,处理后为:1->2->5

解析 :

要想删除重复节点有两个关键点需要解决:

  1. 确定新的头结点。因为对于原链表来说,头结点可能是重复节点,所以也可能会被删除
  2. 如何保证删除重复节点以后,仍然保证链表保持连接,而不会断开。

思路:

几个关键变量:
1. cur:指向当前遍历到的节点
2. pre:指向最近一个不重复节点,也就是已经选取出来的不含有重复节点的链表的尾节点(注意pre不是指向cur 的前一个节点)。当还未发现不重复节点时,pre = null。pre 是保持链表连读的关键,pre式中与剩余链表保持连接
3. next:指向cur的下一个节点
4. head:表示可能的头结点。因为当pre = null时,表示还未发现不重复的节点,head指向的是可能的都节点,一旦pre != null,则head的值即为不含有重复节点的链表的头结点。

过程:

初始时,head指向原链表的头结点,pre = null。
步骤1:遍历链表,当前遍历节点为cur,next指向下一个节点,如果节点cur的值与n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值