本文共 988 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要删除一个排序链表中重复的节点,保留一个。我们可以使用递归的方法来简化逻辑,确保每个重复节点只保留一个。
递归方法的思路是比较当前节点和前一个节点的值。如果当前节点的值与前一个节点的值相同,则递归删除当前节点;否则,返回当前节点作为结果。这种方法确保了每次处理都是基于前一个节点的状态,从而避免了处理链表结构复杂性的问题。
class Solution {public: ListNode* deleteDuplication(ListNode* pHead) { if (pHead == nullptr || pHead->next == nullptr) { return pHead; } return deleteDuplicationHelper(pHead, nullptr); } ListNode* deleteDuplicationHelper(ListNode* cur, ListNode* prev) { if (cur == nullptr) { return prev; } if (prev != nullptr && prev->val == cur->val) { return deleteDuplicationHelper(cur->next, prev); } else { return deleteDuplicationHelper(cur->next, cur); } }};
deleteDuplicationHelper(ListNode* cur, ListNode* prev)
用于处理当前节点和前一个节点。这种方法确保了每个重复节点只保留一个,时间复杂度为 O(n),空间复杂度为 O(1),适用于链表长度较长的情况。
转载地址:http://qibb.baihongyu.com/