给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
简要题解:
设置双指针遍历一整个链表遇到重复的就把当前节点接到下一个节点。当前节点位置不变以防下一段还遇到重复的。主要代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* cur=new ListNode(0);
cur->next=head;
head=cur; ListNode *l,*r;
while(cur->next)
{
l=cur->next;
r=cur;
while(r->next&&r->next->val==l->val)
r=r->next;
if(l==r)cur=cur->next;
else cur->next=r->next;
}
return head->next;
}
};