LeetCode(Remove Duplicates from Sorted List) 兩道刪除排序連結串列中重複數字
阿新 • • 發佈:2019-01-27
題目要求:
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; }