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
相似问题