首页 > 其他 > 详细

删除链表中的重复节点

时间:2019-04-25 19:27:38      阅读:116      评论:0      收藏:0      [点我收藏+]

https://www.nowcoder.com/questionTerminal/fc533c45b73a41b0b44ccba763f866ef

描述

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

 

解析

需要注意到,重复的节点都删除。那就还需要一个节点保持前一个指针。所以需要三个指针来操作。

 

代码

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if (null == pHead) {
            return null;
        }
        //新建一个节点,防止头结点要被删除
        ListNode newHead = new ListNode(-1);
        newHead.next = pHead;
        ListNode pre = newHead;
        ListNode p = pHead;
        ListNode next;
        while (p != null && p.next != null) {
            next = p.next;
            if (p.val == next.val) {//如果当前节点的值和下一个节点的值相等
                while (next != null && p.val == next.val) {//向后重复查找
                    next = next.next;
                }
                pre.next = next;//指针赋值,就相当于删除
                p = next;
            } else {//如果当前节点和下一个节点值不等,则向后移动一位
                pre = p;
                p = p.next;
            }
        }
        return newHead.next;//返回头结点的下一个节点
    }
}

 

删除链表中的重复节点

原文:https://www.cnblogs.com/fanguangdexiaoyuer/p/10770298.html

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