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

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

    public static ListNode deleteDuplication(ListNode pHead) {

            

       /*     ListNode first = new ListNode(-1);//设置一个trick

       //所有这些节点变量都是指向同一个链表,都是在操作同一个链表

            first.next = pHead;   //first用于保存链表,因为pHead可能会被删除

            ListNode p = pHead;   //用于遍历链表

            ListNode last = first;   //last用于删除重复节点,所以它在p节点前面,

            while (p != null && p.next != null) {

                if (p.val == p.next.val) {

                    int val = p.val;

                    while (p!= null&&p.val == val)

                        p = p.next;  //p移到了下一个不相等的节点

                    last.next = p;//这一步是删除p前面的相等节点

                } else {

                    last = p;  //因为p与后一个节点不相等,所以将last移到p处。

                    p = p.next;

                }

            }

            return first.next;

           

            */

       

        //利用递归

        if(pHead==null)

            return null;

      //判断一个链表的头和下一个节点,不相等就让头结点的next指向下一个节点的链表的递归

      //相等时就返回第一个不相等的节点的链表

        if(pHead!=null&&pHead.next==null)

            return pHead;

        ListNode current;

        if(pHead.val==pHead.next.val){

            current=pHead.next;

            while(current!=null&&current.val==pHead.val)

                current=current.next;

            return deleteDuplication(current);

        }else{

            current=pHead.next;

            pHead.next=deleteDuplication(current);

            return pHead;

        }

        }

    }

  • 相关阅读:
    IOS7笔记-10、多线程、滚动视图
    IOS7笔记-8、协议、block、动画
    IOS7笔记- 7、视图、绘制、手势识别
    IOS7笔记-6、控制器多态性、导航控制器、选项卡栏控制器
    IOS7笔记-5、视图控制器生命周期
    C# DevExpress之GridView同步滚动条记录方法
    C# 隐藏TabControl标签
    VC++ 如何识别系统语言类别
    我的免费空间网站
    慕课网-Java入门第一季-7-5 Java 中带参无返回值方法的使用
  • 原文地址:https://www.cnblogs.com/xiaolovewei/p/8028123.html
Copyright © 2011-2022 走看看