做网站图片素材在线编辑/外贸营销渠道
一、题目
二、思路
(1)使用哨兵节点,省去首个元素的逻辑判断,最后返回dummy->next
。
(2)比较cur.next
与cur.next.next
对应的元素是否相同。
(3)因为给定的链表已经是排好序了,我们只需要一次遍历即可(不需要遍历2次,用哈希)。
链表的题通常需要注意两点:
(1)舍得用变量,千万别想着节省变量,否则容易被逻辑绕晕
(2)head
有可能需要改动时,先增加一个 假head,返回的时候直接取 假head.next,这样就不需要为修改 head 增加一大堆逻辑了。
三、代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* deleteDuplicates(ListNode* head) {if(!head) return head;ListNode* dummy = new ListNode(0);dummy->next = head;ListNode* cur = dummy;while(cur->next && cur->next->next){if(cur->next->val == cur->next->next->val){//删除后一个和后面元素int x = cur->next->val;//循环删除while(cur->next && cur->next->val == x){//删除cur->next元素cur->next = cur->next->next;}}else{cur = cur->next;}}return dummy->next;}
};