版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaohaibo_/article/details/85882324
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留。
样例1
输入:1->2->3->3->4->4->5
输出:1->2->5
样例2
输入:1->1->1->2->3
输出:2->3
用两个指针找到重复的起点与结束点
/**
* 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) {
if(!head || !head -> next) return head;
ListNode* ret = new ListNode(0);
ret -> next = head;
ListNode* pre = ret;
while (pre -> next) {
ListNode* cur = pre -> next;
while (cur -> next && cur -> val == cur -> next -> val) cur = cur -> next;
if(pre -> next != cur) pre -> next = cur -> next;
else pre = cur;
}
return ret -> next;
}
};