29. 删除链表中重复的节点
作者:
枳花明
,
2024-11-20 19:43:32
,
所有人可见
,
阅读 1
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* head) {
auto dummy = new ListNode(-1); // 可能会对头结点进行操作,建立一个虚拟头结点
dummy->next = head;
auto cur = dummy;
// 最开始cur->next == head,从第一个节点开始
while( cur->next )
{
auto q = cur->next;
// 注意为什么是 cur->next->val
while( q->next && q->next->val == cur->next->val ) q=q->next; // 如果有重复,会在最后一个重复数停下
if( cur->next == q ) cur = q;
else cur->next = q->next; // 如图
}
return dummy->next;
}
};