題目
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.
解題之法
/**
* 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 || !head->next) return head;
ListNode *start = head;
while (start && start->next) {
if (start->val == start->next->val) {
//ListNode *tmp = start->next;
start->next = start->next->next;
//delete tmp;
} else start = start->next;
}
return head;
}
};
分析
移除有序鏈表中的重復(fù)項需要定義一個指針指向該鏈表的第一個元素,然后第一個元素和第二個元素比較,如果重復(fù)了,則刪掉第二個元素,如果不重復(fù),指針指向第二個元素。這樣遍歷完整個鏈表,則剩下的元素沒有重復(fù)項。