LeetCode(Remove Duplicates from Sorted List) 两道删除排序链表中重复数字

来源:互联网 发布:java布局思想 编辑:程序博客网 时间:2024/05/24 04:29

题目要求:

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

代码:

ListNode *deleteDuplicates(ListNode *head) {    if(head == NULL  || head->next == NULL)      return head;    ListNode* pre = head, *cur = head->next;    while(cur != NULL)    {      if(pre->val == cur->val)      {        pre->next = cur->next;        delete cur;        cur = pre->next;      }      else       {        pre = cur;        cur = cur->next;      }    }    return head;  }


题目二 要求:

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.

代码:

ListNode *deleteDuplicates(ListNode *head) {    if(head == NULL || head->next == NULL)      return head;    ListNode* virtual_head = new ListNode(0);    virtual_head->next = head;    ListNode* del_begin = virtual_head;//添加一个虚拟头结点方便删除头结点        while(del_begin != NULL)    {      ListNode* del_end = del_begin->next;      while(del_end != NULL && del_end->next != NULL &&             del_end->next->val == del_end->val)//找到要删除重复区间的最后一个节点      {        del_end = del_end->next;      }      if(del_begin->next != del_end && del_end != NULL)//如果有重复区间存在,将del_begin节点的下一位指向del_end的下一个节点,并逐个删除区间中的节点      {        ListNode* node = del_begin->next;        del_begin->next = del_end->next;        while(node != del_end)        {          ListNode* pnext = node->next;          delete node;          node = pnext;        }        delete del_end;      }      else         del_begin = del_begin->next;    }    return virtual_head->next;  }



0 0
原创粉丝点击