剑指offer 17. 删除链表中的重复节点

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }
};

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/85882324