基于Python和C++实现删除链表的节点

1. 概述

在编程中,我们经常会遇到需要删除链表中的节点的情况。删除链表中的节点可以通过修改指针的指向来实现,而不需要真正删除节点的内存空间。

2. 删除链表节点的方法

2.1 删除链表中的指定节点

要删除链表中的指定节点,我们需要先找到要删除的节点的前一个节点。然后将前一个节点的指针指向要删除节点的下一个节点,即可实现删除。

2.2 基于Python实现

下面我们将基于Python实现删除链表中的节点。

class ListNode:

def __init__(self, val=0, next=None):

self.val = val

self.next = next

def deleteNode(head, val):

# 若头结点为要删除的节点

if head and head.val == val:

return head.next

cur = head

while cur and cur.next:

if cur.next.val == val:

cur.next = cur.next.next

return head

cur = cur.next

return head

以上代码中,我们定义了一个ListNode类作为链表的节点,每个节点有一个值val和一个指向下一个节点的指针next。然后我们实现了一个deleteNode函数来删除链表中的指定节点。

首先,我们判断头节点是否为要删除的节点,如果是,则直接返回头节点的下一个节点作为新的头节点。

然后,我们使用一个指针cur来遍历链表。在遍历过程中,我们检查cur的下一个节点是否为要删除的节点。如果是,我们修改cur的指针,将其指向要删除节点的下一个节点,实现删除操作。

最后,我们返回链表的头节点。

2.3 基于C++实现

下面我们将基于C++实现删除链表中的节点。

#include

using namespace std;

struct ListNode

{

int val;

ListNode* next;

ListNode(int x) : val(x), next(NULL) {}

};

ListNode* deleteNode(ListNode* head, int val) {

if (head == NULL) return NULL;

if (head->val == val) {

return head->next;

}

ListNode* cur = head;

while (cur->next) {

if (cur->next->val == val) {

cur->next = cur->next->next;

return head;

}

cur = cur->next;

}

return head;

}

以上代码中,我们定义了一个ListNode结构体作为链表的节点,每个节点有一个值val和一个指向下一个节点的指针next。然后我们实现了一个deleteNode函数来删除链表中的指定节点。

首先,我们判断头节点是否为要删除的节点,如果是,则直接返回头节点的下一个节点作为新的头节点。

然后,我们使用一个指针cur来遍历链表。在遍历过程中,我们检查cur的下一个节点是否为要删除的节点。如果是,我们修改cur的指针,将其指向要删除节点的下一个节点,实现删除操作。

最后,我们返回链表的头节点。

3. 总结

通过本文,我们学习了基于Python和C++分别实现删除链表节点的方法。删除链表节点可以通过修改指针的指向来实现,而不需要真正删除节点的内存空间。这种方法时间复杂度为O(n),其中n是链表的长度。

代码部分:

基于Python的代码:

class ListNode:

def __init__(self, val=0, next=None):

self.val = val

self.next = next

def deleteNode(head, val):

# 若头结点为要删除的节点

if head and head.val == val:

return head.next

cur = head

while cur and cur.next:

if cur.next.val == val:

cur.next = cur.next.next

return head

cur = cur.next

return head

基于C++的代码:

#include

using namespace std;

struct ListNode

{

int val;

ListNode* next;

ListNode(int x) : val(x), next(NULL) {}

};

ListNode* deleteNode(ListNode* head, int val) {

if (head == NULL) return NULL;

if (head->val == val) {

return head->next;

}

ListNode* cur = head;

while (cur->next) {

if (cur->next->val == val) {

cur->next = cur->next->next;

return head;

}

cur = cur->next;

}

return head;

}

后端开发标签