zoukankan      html  css  js  c++  java
  • 删除链表中的重复节点

    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;//返回头结点的下一个节点
        }
    }

     相似问题:[LeetCode] 83. Remove Duplicates from Sorted List ☆(从有序链表中删除重复项)

  • 相关阅读:
    vue组件的通信
    vue基础
    vue项目总结
    路由(4)传参
    路由(3)
    第一次作业
    JAVA-2.0-homework
    JAVA-2.0-上机
    JAVA-1.9-homework
    JAVA-1.9-上机
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/10770298.html
Copyright © 2011-2022 走看看