链接: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,因为当输入为[ ]的时候,后者会报错,因为头节点就为空,不存在下一个节点指向。