82. Remove Duplicates from Sorted List II


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

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

class Solution {
public:
	ListNode* deleteDuplicates(ListNode* head) {
		ListNode * p = head;
		if (p == NULL || p->next == NULL) return head;

		while (p->next != NULL && p->next->val == p->val)  //第一个数字和第二个相同  
		{
			while (p->next != NULL &&  p->next->val == p->val)
				p = p->next;   // 找到最后一个数字

			if (p->next == NULL)  return NULL; //全部数都一样  

			p = p->next;  //找后一个数  

		}
	
		ListNode * pre =p;   //保存前一个     
		ListNode *	head1 = pre;
		
		if (p->next == NULL) return head1; 
		p = p->next;  // 后一个 ,和第一个数字一定不同  

		ListNode *q; 

		while (p!=NULL &&p->next != NULL)
		{
			q = p->next;
			if (p->val != q->val)
			{   

				pre->next = p; 
				pre = p; 
				pre->next = NULL;

				p = q;
			}
			else
			{
				while (q->next != NULL  &&   q->val == q->next->val)
				{
					q = q->next;  //最后一个相同的  
				}
				p = q->next;
			}
		}
		pre->next = p;
		return head1;
	}
};

猜你喜欢

转载自blog.csdn.net/qq_34609108/article/details/80042255