博客
关于我
剑指offer删除链表中重复的节点
阅读量:634 次
发布时间:2019-03-14

本文共 1277 字,大约阅读时间需要 4 分钟。

链表是排好序的,且需要删除重复的节点。重复节点指的是连续出现的相同值的节点,例如1,1,2,2,3中的第二个1、第二个2需要被删除。我们需要创建一个新的链表来存储结果,以避免在原链表上进行操作可能带来的复杂性。

步骤如下:

  • 初始化新链表:创建一个新的头节点newHead,并用一个指针tmp来跟踪当前位置。
  • 遍历原链表:从原链表的头节点开始,逐个遍历每个节点。
  • 处理重复节点
    • 如果当前节点的值与下一个节点的值相等,继续遍历,直到找到不相同的节点。
    • 一旦找到不同值的节点,将当前节点连接到tmp后面,并移动指针到下一个节点。
  • 处理非重复节点:如果当前节点的值与下一个节点的值不相等,将当前节点连接到tmp后面,并移动指针到下一个节点。
  • 清除尾部节点:如果最后一个节点是重复节点,设置tmp的下一个节点为null。
  • 代码实现如下:

    public class Solution {    public ListNode deleteDuplication(ListNode pHead) {        if (pHead == null) {            return null;        }        ListNode newHead = new ListNode(-1);        ListNode tmp = newHead;        ListNode cur = pHead;        while (cur != null) {            if (cur.next != null && cur.val == cur.next.val) {                while (cur.next != null && cur.val == cur.next.val) {                    cur = cur.next;                }                cur = cur.next;            } else {                tmp.next = cur;                tmp = tmp.next;                cur = cur.next;            }            tmp.next = null;        }        return newHead.next;    }}

    代码解释

    • 初始化:创建了一个新的链表头newHead,并初始化了tmp指针。
    • 遍历链表:从pHead开始,逐个访问每个节点。
    • 处理重复节点:当发现当前节点的值与下一个节点的值相等时,继续移动cur指针,直到找到不相同的节点。
    • 连接节点:当处理完重复节点后,连接当前节点到tmp后面,并移动指针。
    • 清除尾部节点:最后设置tmp的下一个节点为null,确保尾部节点被删除。

    该方法能够正确处理所有情况,包括链表为空、单个节点以及最后一个节点是重复节点的情况。

    转载地址:http://krhoz.baihongyu.com/

    你可能感兴趣的文章
    MySQL InnoDB引擎的锁机制详解
    查看>>
    Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
    查看>>
    mysql InnoDB数据存储引擎 的B+树索引原理
    查看>>
    mysql innodb通过使用mvcc来实现可重复读
    查看>>
    mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
    查看>>
    Mysql join原理
    查看>>
    mysql order by多个字段排序
    查看>>
    MySQL Order By实现原理分析和Filesort优化
    查看>>
    mysql problems
    查看>>
    mysql replace first,MySQL中处理各种重复的一些方法
    查看>>
    MySQL replace函数替换字符串语句的用法(mysql字符串替换)
    查看>>
    Mysql Row_Format 参数讲解
    查看>>
    mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
    查看>>
    MySQL Server 5.5安装记录
    查看>>
    mysql slave 停了_slave 停止。求解决方法
    查看>>
    MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
    查看>>
    mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
    查看>>
    mysql Timestamp时间隔了8小时
    查看>>
    Mysql tinyint(1)与tinyint(4)的区别
    查看>>
    mysql union orderby 无效
    查看>>