面试中常见链表问题5:删除链表中重复元素2

来源:互联网 发布:papi 知乎 编辑:程序博客网 时间:2024/06/06 05:49
    给定一个有序单链表,删除链表中重复元素,比如:1->2->3->3->4->4->5,则返回1->2->5。    解析:设置三个指针,pre、cur和next,当cur->val和next->val不相等时,更新pre = cur、cur = next和next = next->next;当cur->val和next->val相等时,向前移动next指针,直到cur->val和next->val不相等时为止。
ListNode* deleteDuplicates(ListNode* head) {if(head == NULL || head->next == NULL)return head;ListNode *pHead = new ListNode(0);pHead->next = head;ListNode *pre = pHead;ListNode *cur = head;ListNode *next = head->next;while(next){if(cur->val != next->val){pre = cur;cur = next;next = next->next;continue;}while(next){if(cur->val == next->val){ListNode *tmp = next;next = next->next;delete tmp;}else{break;}}ListNode *tmp = cur;pre->next = next;cur = next;delete tmp;if(cur){next = cur->next;}else{break;}}return pHead->next;}
0 0