【遍历】【链表】【2024-01-14】
思路
比较两个相邻的节点,如果下一个节点值和当前节点值一样,则跳过下一个节点将当前节点和下一个节点的下一个节点相连。
迭代比较相邻的节点,直到到达链表尾部。
算法
/**
* 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 *curr = head;
while (curr->next) {
if (curr->val == curr->next->val) {
curr->next = curr->next->next;
}
else {
curr = curr->next;
}
}
return head;
}
};
复杂度分析
时间复杂度: O ( n ) O(n) O(n), n n n 是链表的长度。
空间复杂度: O ( 1 ) O(1) O(1)。
如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。
如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。
最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。