剑指offer 删除链表中重复的结点

剑指offer 删除链表中重复的结点

  • 题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

  • 题目解答

很简单的题目,但是在写代码之前一定要设想好所有情况,一定要思路清晰,否则写了还会删掉,还会修改。

class Solution {
public:
	ListNode* deleteDuplication(ListNode* pHead)
	{
		if (pHead == NULL)
			return pHead;
		ListNode* p = pHead;
		ListNode* prior = pHead;
		while (p){
			bool dup = false;
			while (p->next!=NULL && p->val == p->next->val){
				p->next = p->next->next;
				dup = true;
			}
			if (dup == true){
				if (p == pHead){
					p = p->next;
					pHead = p;
					prior = p;
				}
				else{
					p = p->next;
					prior->next = p;
				}
			}
			else{
				p = p->next;
				if (prior->next != p)
					prior = prior->next;
			}
		}

		return pHead;
	}
};
弹钢琴的猫 /
Published under (CC) BY-NC-SA in categories 算法  tagged with 剑指offer  Linked List