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 };

猜你喜欢

转载自www.cnblogs.com/ariel-dreamland/p/9159166.html