请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

/**
 * 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 18:14:45

如果是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 回复 有任何疑惑可以回复我~
  • 提问者 tataxqy #1
    谢谢bobo老师!!你太厉害了!!
    回复 有任何疑惑可以回复我~ 2019-05-09 18:47:18
liuyubobobo 2019-05-09 14:51:26

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

0 回复 有任何疑惑可以回复我~
  • 提问者 tataxqy #1
    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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;
            }
            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;
        }
    }
    回复 有任何疑惑可以回复我~ 2019-05-09 14:55:15
  • liuyubobobo 回复 提问者 tataxqy #2
    请给我题目链接,不然我无法调试。请在原问题中修改你的代码为完整提交代码。
    回复 有任何疑惑可以回复我~ 2019-05-09 14:56:11
  • 提问者 tataxqy 回复 liuyubobobo #3
    不好意思bobo老师,我修改好了
    回复 有任何疑惑可以回复我~ 2019-05-09 18:05:37
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信