LeetCode(83): 删除排序链表中的重复元素
Easy!
题目描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2 输出: 1->2
示例 2:
输入: 1->1->2->3->3 输出: 1->2->3
解题思路:
移除有序链表中的重复项需要定义个指针指向该链表的第一个元素,然后第一个元素和第二个元素比较,如果重复了,则删掉第二个元素,如果不重复,指针指向第二个元素。这样遍历完整个链表,则剩下的元素没有重复项。
C++解法一:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *deleteDuplicates(ListNode *head) { 12 if (!head || !head->next) return head; 13 14 ListNode *start = head; 15 while (start && start->next) { 16 if (start->val == start->next->val) { 17 ListNode *tmp = start->next; 18 start->next = start->next->next; 19 delete tmp; 20 } else start = start->next; 21 } 22 return head; 23 } 24 };
天雨虽宽,不润无根之草。
佛门虽广,不渡无缘之人。