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

    offer_56

    概要:删除链表中重复的结点

    题目描述:

    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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(pHead == null || pHead.next == null) return pHead;
            //防止头结点被删掉,要创建一个新的结点指向头结点
            //相当于在原来的链表上多加了一个结点放在头结点的前边
            ListNode head =  new ListNode(0);
            head.next  = pHead;
            
            
            //前结点
            ListNode pre = head;
            //当前结点
            ListNode cur = pHead;
            
            
            //当前结点与当前结点的下一个结点存在
            while(cur != null && cur.next != null)
            {
                if(cur.val == cur.next.val){//如果当前结点的值与当前结点的下一个结点的值相同
                
                    //再判断当前结点的下一个结点是否存在,并且当前结点的值与当前结点的下一个结点的值是否相同
                    while(cur.next != null && cur.val == cur.next.val){
                        //如果相同,就把当前结点往后移动;直到当前结点的值与下一个结点的值不同才不移动当前结点位置
                        cur = cur.next;
                    }
                    //已经把与当前结点所有的相同值的结点都划过了,而且当前结点指向的是  与当前结点值相同的结点的 最后一个结点
                    //把前结点的值指向换成当前结点的下一个,就相当于删除掉了所有的与当前结点相同的值的结点,并且包含当前结点的值
                    pre.next = cur.next;
                    //当前结点后移
                    cur = cur.next;
                }else{//如果当前结点的值与当前结点的下一个结点的值不同
                  //前结点换成当前结点
                    pre = cur;
                    //当前结点往后移动
                    cur = cur.next;
                }
            }
            //因为head是自定义的头结点,要返回原来的链表,应改return的是下一个
            return head.next;
            
        }
    }
    

  • 相关阅读:
    【04】Vue 之 事件处理
    【03】Vue 之列表渲染及条件渲染
    【02】 Vue 之 数据绑定
    传递参数的模式最适合向函数传入大量可先参数的情形
    ie6 PNG图片透明
    实现表单的输入框当光标为当前时,去掉默认值
    SSIS ->> Environment Variables
    SQL Server ->> FileTable
    SQL Server ->> 间接实现COUNT(DISTINCT XXX) OVER(PARTITION BY YYY)
    SQL Server ->> EXECUTE AS LOGIN/USER和Revert表达式
  • 原文地址:https://www.cnblogs.com/SunAlbert/p/13475382.html
Copyright © 2011-2022 走看看