题意
在O(1)时间内删除链表节点。
题解
由于要删除一个节点,需要知道上一个节点的地址,将上一个节点的地址的next指向要删除节点的next。
但是,如果我们不改变next值,而是将要删除节点的下个节点中的值复制到当前节点,然后删除下个几点,相当于间接删除掉了这个节点。
注意几点:
如果是尾节点,还是需要从头遍历到尾删除的。
如果只有一个节点删除后要返回NULL。
1 | struct ListNode { |
扩展题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
题解
比较恶心。
需要考虑各种情况。
有序的数列,记录相邻的重复的数的个数,为1,则加到链表中,否则不管。注意开头和结尾。
1 | struct ListNode { |