Remove Duplicates from Sorted List II(LeetCode)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014485485/article/details/81978774

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

Example 1:

Input: 1->2->3->3->4->4->5
Output: 1->2->5

Example 2:

Input: 1->1->1->2->3
Output: 2->3

给你一个有序链表,不是值唯一的结点就都删除。

思路:

头结点可能会变。增加一个dummy结点:链表的第一个node,因为没有前驱节点,所以该node需要特殊处理,会导致额外的代码量。如果创建一个dummy,将其作为第一个node的前驱节点,这样链表中所有的node都可以也能够同样的逻辑来处理了。

从dummy开始遍历,如果存在值重复就抛弃所有值重复的结点,进入下一个结点继续同样的判断,唯一的话prex下移保留住这个结点。

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
	ListNode* deleteDuplicates(ListNode* head) {
		if (!head || !head->next)
			return head;
		ListNode dummy(0);
		dummy.next = head;//记住头结点
		ListNode *pre = &dummy;
		while (pre->next)
		{
			ListNode *cur = pre->next;
			while (cur->next && cur->val == cur->next->val)
				cur = cur->next;
			if (cur != pre->next)//存在相同的结点,则相同的结点都跳过
				pre->next = cur->next;
			else
				pre = pre->next;
		}
		return dummy.next;
	}
};

猜你喜欢

转载自blog.csdn.net/u014485485/article/details/81978774