1
class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL)//当前指针为空 //或者链表就一个节点 return pHead; ListNode*head=new ListNode(0); //新建一个节点 头结点 指向当前这个 防止头结点也有被删除的可能; head->next=pHead; ListNode * pre=head; ListNode * last=head->next; while(last!=nullptr)//不是尾部 //用last工作指针后移 { if( last->next!=nullptr&&last->val==last->next->val) //last已经不是空指针 last next也不能是空指针 { // 找到最后的一个相同节点 while(last->next!=nullptr&&last->val==last->next->val) {last=last->next;} //连接 pre->next= last->next; //不换值 只换指向 last=last->next; } else //普通情况 { pre=last; last=last->next;//一步一步的向后移动 } } return head->next ; } };
本文详细解析了一种链表去重算法,通过引入辅助节点处理链表中重复元素的删除问题,确保链表数据的唯一性。算法首先检查链表是否为空或只有一个节点,然后创建一个头结点用于连接原始链表,避免头结点被删除的情况。通过两个指针,分别跟踪前一节点和当前节点,遍历链表,当发现重复元素时,跳过所有重复元素直至遇到不同元素或链表末尾。
964

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



