力扣简83 删除排序链表中的重复元素
//注意这个ListNode类需要写在solution外面,要不然main里没法使用。而且main中类的新建要用。题解说要详细询问考官删除的节点是否需要释放空间!
//自己写的: 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
//第一种思路的时候出错了 直接用l.next和l.next.next导致都混乱了 以后链表还是建议要用pre
//换了写法后,最初没有第一个空判断,导致对于空情况取next报错了
//题解中有一个看起来更优越的方法:设l,r,令r移动至与l值不同的位置再更改指针指向,减少了更改次数。
public ListNode deleteDuplicates(ListNode head) {
if(head==null) {
return head;
}
else {
ListNode l = head.next;
ListNode pre = head;
while(l!=null) {
if(pre.val==l.val) {
pre.next=l.next;
l=l.next;
}
else {
pre=l;
l=l.next;
}
}
return head;
}
}
//题解:
public ListNode deleteDuplicates(ListNode head) {
if(head==null) {
return head;
}
else {
ListNode l=head;
ListNode r=head;
while(r.next!=null) {
r=r.next;
if(l.val==r.val) {
continue;
}
else {
l.next=r;//最初竟然忘了改这个指针
l=r;
}
}
l.next=null; //对于最终末尾有相同元素的,最后r指针遍历到null而停止,此时应该l.next置null
}
return head;
}

浙公网安备 33010602011771号