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

    题目描述:

      在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
    例如,链表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)
                return null;
            if(pHead.next==null)
                return pHead;
            ListNode first=new ListNode(-1);
            first.next=pHead;
            ListNode last=first;
            ListNode pNode=pHead;
            while(pNode!=null&&pNode.next!=null){
                if(pNode.val==pNode.next.val){
                    int val=pNode.val;
                    while(pNode!=null&&pNode.val==val){  //切记在链表中循环遍历一定要判断当前节点是否为空。
                        pNode=pNode.next;
                    }
                    last.next=pNode;   
                }else{
                    last=pNode;
                    pNode=pNode.next;
                }
            }
            return first.next;
        }
    }
    

    方法二:

    /*
     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)
                return null;
            if(pHead.next==null)
                return pHead;
            if(pHead.val==pHead.next.val){
                ListNode pNode=pHead;
                int val=pNode.val;
                while(pNode!=null&&val==pNode.val){
                    pNode=pNode.next;
                }
                return deleteDuplication(pNode);   //找到第一个不重复的点开始递归。
                 
            }else{
                pHead.next=deleteDuplication(pHead.next); //如果当前节点不是重复的保存下来,从下一个节点开始递归。
                return pHead;
            }
            
    }
    }
    
  • 相关阅读:
    7、JavaScript总结——实现选项卡切换的效果
    6、JavaScript进阶篇③——浏览器对象、Dom对象
    5、JavaScript进阶篇②——函数、事件、内置对象
    4、JavaScript进阶篇①——基础语法
    3、DOM操作
    2、JavaScript常用互动方法
    1、JavaScript入门篇
    HTML5与CSS3网页设计
    JAVA程序设计
    Elasticsearch搭建问题汇总
  • 原文地址:https://www.cnblogs.com/yjxyy/p/10961217.html
Copyright © 2011-2022 走看看