删除链表中重复的结点
题目
存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
思路
1、cur指向当前节点,next指向当前节点的下一一节点,如果当前节点的值 与下一结点的值重复,删除下一结点
2、删除下一节点前,dup_node指向下一结点,代表重复的结点要被删除,下一结点后移,删除dup_node
3、更新当前结点的next指针,使其指向下一结点(如果删除的是链表尾结点,需要做判空处理)
/** * 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 == nullptr) { return nullptr; } ListNode *cur = head; ListNode *next = head; ListNode *dup_node = nullptr; while (cur->next != nullptr) { next = cur->next; while (next != nullptr && cur->val == next->val) { dup_node = next; next = next->next; delete dup_node; dup_node = nullptr; } cur->next = next; if (cur->next != nullptr) { cur = cur->next; } } return head; } };