码迷,mamicode.com
首页 > 其他好文 > 详细

58.删除链表中重复的节点

时间:2019-06-01 23:31:29      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:删除   node   class   表头   ica   存在   不重复   cat   val   

题目描述:

??在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。
例如,链表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;
        }
        
}
}

58.删除链表中重复的节点

标签:删除   node   class   表头   ica   存在   不重复   cat   val   

原文地址:https://www.cnblogs.com/yjxyy/p/10961217.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!