leetcode——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.

For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 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) {
        
        if (head == NULL || head->next == NULL)
            return head;
            
        ListNode* pnode = head;

        ListNode* pre = NULL;
        
        
       while(pnode!=NULL&&pnode->next!=NULL) 
       {
        
          if(pnode->val!=pnode->next->val)
          {
              pre = pnode;
              pnode = pnode->next;

          }
          else
          {
              int val = pnode ->val;
              while(pnode!=NULL&&pnode->val==val)
              {
                  pnode = pnode->next;
                  
              }
               if(pre==NULL){
                    head = pnode;
                }else{
                    pre->next = pnode;
                }

              
              
              
          }
       }
       return head;
    }
};

你可能感兴趣的:(LeetCode,算法题)