题解 | #删除链表中重复的结点#
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
解题思路
- 先创建一个新的结点,这个是为了后续能方便指向链表的第一个元素;
- 以当前结点的下一个和下下一个是否存在作为条件进行循环遍历。如果当前连着的两个元素值相同,则利用一个循环删除重复的元素。
- 最后返回新节点的next元素即可。
关键:对链表的定义要十分熟悉。
复杂度
- 时间复杂度为O(N);
- 空间复杂度为O(1)。
代码
Python
class Solution:
def deleteDuplication(self , pHead: ListNode) -> ListNode:
if pHead is None:
return pHead
res = ListNode(-1)
res.next = pHead
cur = res
while cur.next and cur.next.next:
if cur.next.val == cur.next.next.val:
tmp = cur.next.val
while cur.next and cur.next.val == tmp:
cur.next = cur.next.next
else:
cur = cur.next
return res.next
C++
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead) {
ListNode* res = new ListNode(-1);
res->next = pHead;
ListNode* cur = res;
while(cur->next && cur->next->next)
{
if(cur->next->val == cur->next->next->val)
{
int tmp = cur->next->val;
while(cur->next && cur->next->val == tmp)
{
cur->next = cur->next->next;
}
}
else
{
cur = cur->next;
}
}
return res->next;
}
};
