题目:
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
.
题意:
给定一个排好序的链表,删除所有值重复的节点使每个元素仅出现一次。
转载:leetcode题解
思路一:
使用递归实现,检测前后两个节点值是否相等,相等则删除后一个元素。
代码:16ms
/** * 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) return head; ListNode dummy(head->val+1); //值只要跟head不同即可 dummy.next = head; recur(&dummy, head); return dummy.next; } private: static void recur(ListNode* prev, ListNode* cur){ if(cur==nullptr) return; if(prev->val == cur->val){ //删除head prev->next = cur->next; delete cur; recur(prev, prev->next); }else{ recur(prev->next, cur->next); } } };思路二:
迭代版。
代码:
/** * 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==nullptr) return nullptr; for (ListNode* prev = head, *cur=head->next; cur; cur = cur->next){ if(prev->val==cur->val){ prev->next = cur->next; delete cur; }else{ prev = cur; } } return head; } };