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回答
-
如果是Leetcode上的问题,给我题号就好。
你现在的代码,最大的问题,是返回的pHead,但是,如果你删除的节点包括pHead这个节点的话,返回pHead就是错误的。你的head是一个虚拟头结点,你应该返回head.next。
其次,你的内部逻辑有问题,对于1,1,1,2,3这样的测试用例,你的逻辑只能得到1,2,3的结果,但是题目要求得到的结果是2,3。要把重复的1删除干净。你现在的逻辑,每次比较相邻接点,如果想等就删除一个。所以在删到只剩下一个1的时候,就删除不掉了。
可以参考我的逻辑(C++):
大意是,每次寻找每一个值相同的链表段,如果这个链表段中包含的节点个数比1大,则整段删除。
继续加油!:)
012019-05-09 -
liuyubobobo
2019-05-09
请给我题目链接和你提交的完整代码。
032019-05-09
相似问题