Leetcode 删除重复的链表元素

来源:互联网 发布:手机怎样看淘宝的积分 编辑:程序博客网 时间:2024/05/01 16:04
给定一个链表,其中可能包含重复的元素,比如1->2->2->3->4
第一题:删除多余的重复的元素: 也就是得到1->2->3->4
第二题:删除所有的重复的元素:1->3->4

结构体和函数声明如下:


typedef struct Node {int val;ListNode * next;} *ListNode ListNode * removeDuplicates(ListNode * head)



第一题:
{     if(head == NULL) return NULL;     ListNode * cur1 = head;     ListNode * cur2 = head;     while(cur2 != NULL)     {          int val = cur1->val;          while(cur2 && cur2->val == cur1->val)          {               cur2 = cur2 ->next;          }          cur1->next = cur2;          cur1 = cur1->next;     }      return head;}



第二题:
感觉第二个比较有趣,要考虑的情况也多一点,关键是找到distinct value,并且加入到新的链表中去
{     ListNode *pre = head, *cur = head,*dummy,*tail;     dummy = new ListNode();     tail = dummy;     while(cur != NULL && cur->next != NULL)     {          //如果遇到相等的元素,就不断的向后移动         while(cur->next != NULL && cur->val == cur->next->val) cur = cur->next;          // distinct value,加入到新的链表中去         if(pre == cur)         {             tail->next = pre;             tail = tail->next;         }         pre = cur->next;         cur = cur->next;     }     tail -> next = cur;     return dummy->next;}