博客
关于我
剑指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/

    你可能感兴趣的文章
    nrf开发笔记一开发软件
    查看>>
    nrm —— 快速切换 NPM 源 (附带测速功能)
    查看>>
    nrm报错 [ERR_INVALID_ARG_TYPE]
    查看>>
    NS3 IP首部校验和
    查看>>
    NSDateFormatter的替代方法
    查看>>
    NSError 的使用方法
    查看>>
    NSGA-Ⅲ源代码
    查看>>
    nsis 安装脚本示例(转)
    查看>>
    NSJSON的用法(oc系统自带的解析方法)
    查看>>
    nslookup 的基本知识与命令详解
    查看>>
    NSNumber与NSInteger的区别 -bei
    查看>>
    NSOperation基本操作
    查看>>
    NSRange 范围
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>