思路:这个题目又是缝缝补补过的,利用指针q指示当前待审查元素,p为指向剩下链表(删除重复元素后)的最后一个元素,t为新元素,找到t->val != q ->val 然后将p 指向 t,删除了中间重复的元素,如果t 就是q 指向的元素,那么不用删除,p,q的位置都要移动。
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if(head){
ListNode *p, *q, *t;
p = q = head;
t = head->next;
bool flag = 0;
while(t){
if(t->val != q->val){
if(head->next != t && q == head){p = q = head = t;}
else{
if(t == q->next) p = q;
p->next = t;
q = t;
}
flag = 0;
}
else
flag = 1;
t = t->next;
}
if(q->next)p->next = t;
if(q==head && flag == 1) head = NULL;
}
return head;
}
};
本文介绍了一种优化方法,通过使用指针技巧,实现快速删除链表中的重复元素,确保每个节点的唯一性。这种方法在时间和空间效率上都有显著提升,特别适用于处理大量数据时的链表操作。
711

被折叠的 条评论
为什么被折叠?



