bobo老师,请问关于删除链表重复结点的题

来源:5-2 测试你的链表程序

tataxqy

2019-05-09

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode deleteDuplicates(ListNode pHead) {
        if(pHead==null)
    {
        return null;
    }
    ListNode head=new ListNode(0);
    head.next=pHead;
    ListNode p=head;
    while(p.next!=null&&p.next.next!=null)
    {
        ListNode node1=p.next;
        ListNode node2=node1.next;
        if(node1.val==node2.val)
        {
            p.next=node2.next;
        }else{
             p=p.next;
        }
       
 
    }
    return pHead;
        
    }
}

  题目链接:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/submissions/


写回答

2回答

liuyubobobo

2019-05-09

如果是Leetcode上的问题,给我题号就好。


你现在的代码,最大的问题,是返回的pHead,但是,如果你删除的节点包括pHead这个节点的话,返回pHead就是错误的。你的head是一个虚拟头结点,你应该返回head.next。


其次,你的内部逻辑有问题,对于1,1,1,2,3这样的测试用例,你的逻辑只能得到1,2,3的结果,但是题目要求得到的结果是2,3。要把重复的1删除干净。你现在的逻辑,每次比较相邻接点,如果想等就删除一个。所以在删到只剩下一个1的时候,就删除不掉了。


可以参考我的逻辑(C++):

https://github.com/liuyubobobo/Play-Leetcode/blob/master/0082-Remove-Duplicates-from-Sorted-List-II/cpp-0082/main.cpp


大意是,每次寻找每一个值相同的链表段,如果这个链表段中包含的节点个数比1大,则整段删除。


继续加油!:)

0
1
tataxqy
谢谢bobo老师!!你太厉害了!!
2019-05-09
共1条回复

liuyubobobo

2019-05-09

请给我题目链接和你提交的完整代码。

0
3
tataxqy
回复
liuyubobobo
不好意思bobo老师,我修改好了
2019-05-09
共3条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程