m******g 发帖数: 3667 | 1 为什么要把head赋给current?然后再操作?
如果直接在head进行操作 (删掉ListNode current = head 这一行,current改成head
),实际返回[2],期待[1,2], 链表是1-1-2
但是我想不通啊,第一个node=1 怎么会消失的?
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return null;
}
ListNode current= head;
while(current.next!=null) {
if (current.val == current.next.val){
current.next = current.next.next;
}
else current= current.next;
}
return head;
}
} |
P******a 发帖数: 1379 | 2 直接操作head,那遍历完了head的值变到尾部去了,你拿啥返回?
head
【在 m******g 的大作中提到】 : 为什么要把head赋给current?然后再操作? : 如果直接在head进行操作 (删掉ListNode current = head 这一行,current改成head : ),实际返回[2],期待[1,2], 链表是1-1-2 : 但是我想不通啊,第一个node=1 怎么会消失的? : class Solution { : public ListNode deleteDuplicates(ListNode head) { : : if (head == null) { : return null; : }
|
l*******g 发帖数: 5 | 3 画个图吧,就明白了
head
【在 m******g 的大作中提到】 : 为什么要把head赋给current?然后再操作? : 如果直接在head进行操作 (删掉ListNode current = head 这一行,current改成head : ),实际返回[2],期待[1,2], 链表是1-1-2 : 但是我想不通啊,第一个node=1 怎么会消失的? : class Solution { : public ListNode deleteDuplicates(ListNode head) { : : if (head == null) { : return null; : }
|
J**9 发帖数: 835 | 4 class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head||!head->next) return head;
ListNode *prev=head, *p=head->next;
while(p) {
if (p->val==prev->val) {
prev->next = p->next;
free(p);
p = prev->next;
} else {
prev=prev->next;
p=p->next;
}
}
return head;
}
}; |
o****p 发帖数: 9785 | 5 链表有很多tricks,最好的事在头上先加个dummy header,很多事情就好办了。建议你
去找linked list problems这本小书好好学习一下。
head
【在 m******g 的大作中提到】 : 为什么要把head赋给current?然后再操作? : 如果直接在head进行操作 (删掉ListNode current = head 这一行,current改成head : ),实际返回[2],期待[1,2], 链表是1-1-2 : 但是我想不通啊,第一个node=1 怎么会消失的? : class Solution { : public ListNode deleteDuplicates(ListNode head) { : : if (head == null) { : return null; : }
|