首页 > 其他 > 详细

剑指Offer对答如流系列 - 删除链表中重复的结点

时间:2020-01-31 19:37:38      阅读:50      评论:0      收藏:0      [点我收藏+]

面试题18:删除链表中重复的结点

题目描述

在一个排序的链表中,如何删除重复的节点?

链表结构定义如下

  public class Node{
        int val;
        Node next;
        public Node(int value,Node next) {
            val=value;
            next=next;
        }
    }

问题分析

在上一篇文章剑指Offer对答如流系列 - 在O(1)时间删除链表结点已经论述过链表节点的删除。这里不再多说。

这道题略有不同的是 链表的节点的值是符合排序的,我们很容易检测数值相同的节点,考虑到这种节点有多个(连续重复的情况),我们这里要稍作处理。其他操作都是非常常规的。

问题解答

具体解答如下:

 public Node deleteDuplication(Node pHead){
        Node pre = null;
        Node cur = pHead;
        while(cur!=null){
            // cur指的是当前节点,当当前节点的下一个节点不为null 且与当前节点的值相同的时候 进行循环(解决连续重复的问题)
            if(cur.next!=null && cur.next.val==cur.val){
                while(cur.next!=null && cur.next.val==cur.val) {
                    cur=cur.next;
                }
                cur=cur.next;
                if(pre == null) {
                    pHead=cur;
                }
                else {
                    pre.next=cur;
                }
            }else{
                pre=cur;
                cur=cur.next;
            }
        }
        return pHead;
    }

剑指Offer对答如流系列 - 删除链表中重复的结点

原文:https://www.cnblogs.com/JefferyChenXiao/p/12246325.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!