实现删除链表节点的过程可以分为几个步骤:
-
找到需要删除的节点:遍历链表,找到待删除节点的前一个节点。如果待删除节点为头节点,则直接将头节点指针指向下一个节点即可。
-
删除节点:修改前一个节点的指针,指向待删除节点的下一个节点。
-
释放空间:删除节点之后,需要释放被删除节点的空间,否则会造成内存泄漏。
如果链表节点的数据结构如下:
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
那么可以使用以下代码实现删除节点的过程:
class Solution:
def deleteNode(self, head: ListNode, val: int) -> ListNode:
# 头节点需要单独处理
if not head:
return None
if head.val == val:
return head.next
# 遍历链表找到待删除节点和前一个节点
pre = head
cur = head.next
while cur and cur.val != val:
pre = cur
cur = cur.next
if not cur:
return head
# 删除节点
pre.next = cur.next
# 释放空间
del cur
return head
示例1:在链表 [4,5,1,9] 中,删除节点 5。
node4 = ListNode(4)
node5 = ListNode(5)
node1 = ListNode(1)
node9 = ListNode(9)
node4.next = node5
node5.next = node1
node1.next = node9
solution = Solution()
head = solution.deleteNode(node4, 5)
# 链表变为 [4,1,9]
示例2:在链表 [4,5,1,9] 中,删除节点 3(不在链表中)。
node4 = ListNode(4)
node5 = ListNode(5)
node1 = ListNode(1)
node9 = ListNode(9)
node4.next = node5
node5.next = node1
node1.next = node9
solution = Solution()
head = solution.deleteNode(node4, 3)
# 链表仍为 [4,5,1,9]
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python和C++实现删除链表的节点 - Python技术站