LeetCode 83 删除排序链表中的重复元素

链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

输入: 1->1->2
输出: 1->2
示例 2:

输入: 1->1->2->3->3
输出: 1->2->3



这也是一个链表的删除问题,所以要找到待删节点的前一个节点。由于链表是已排序的,那么头节点一定是最小的节点,它不用被删除,并且重复的元素一定是在一起的。所以首先定义一个指针,指向头节点。然后当出现重复元素的时候,只保留第一个元素,删掉其余的相同元素。如果下一个节点不是重复的,那么就将指针向前移动一位。

c++代码如下:

 1 class Solution {
 2 public:
 3     ListNode* deleteDuplicates(ListNode* head) {
 4         auto cur = head;
 5         while(cur){
 6             if(cur -> next && cur -> val == cur -> next -> val){
 7                 cur -> next = cur -> next -> next;
 8             }
 9             else{
10                 cur = cur -> next;
11             }  
12         }
13         
14         return head;
15     }
16 };

在这里需要注意的是,第5行的while里面必须是cur,而不能是cur -> next,因为当输入为[ ]的时候,后者会报错,因为头节点就为空,不存在下一个节点指向。

 

posted @ 2019-09-20 15:27  wtzhang  阅读(175)  评论(0编辑  收藏  举报