编写一个删除链表的函数
Algorithm For C/C++:遍历链表,将所有节点一一删除。这里的要点是如果当前指针被删除,则不访问当前指针的下一个。
在Java和Python,会发生自动垃圾回收,因此删除链表很容易。只需要将 head 更改为 null。
执行:
C++
// C++ program to delete a linked list
#include
using namespace std;
/* Link list node */
class Node {
public:
int data;
Node* next;
};
/* Function to delete the entire linked list */
void deleteList(Node** head_ref)
{
/* deref head_ref to get the real head */
Node* current = *head_ref;
Node* next = NULL;
while (current != NULL)
{
next = current->next;
free(current);
current = next;
}
/* deref head_ref to affect the real head back
in the caller. */
*head_ref = NULL;
}
/* Given a reference (pointer to pointer) to the head
of a list and an int, push a new node on the front
of the list. */
void push(Node** head_ref, int new_data)
{
/* allocate node */
Node* new_node = new Node();
/* put in the data */
new_node->data = new_data;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Driver code*/
int main()
{
/* Start with the empty list */
Node* head = NULL;
/* Use push() to construct below list
1->12->1->4->1 */
push(&head, 1);
push(&head, 4);
push(&head, 1);
push(&head, 12);
push(&head, 1);
cout << "Deleting linked list";
deleteList(&head);
cout << "\nLinked list deleted";
}
// This is code is contributed by rathbhupendra
C
// C program to delete a linked list
#include
#include
#include
/* Link list node */
struct Node
{
int data;
struct Node* next;
};
/* Function to delete the entire linked list */
void deleteList(struct Node** head_ref)
{
/* deref head_ref to get the real head */
struct Node* current = *head_ref;
struct Node* next;
while (current != NULL)
{
next = current->next;
free(current);
current = next;
}
/* deref head_ref to affect the real head back
in the caller. */
*head_ref = NULL;
}
/* Given a reference (pointer to pointer) to the head
of a list and an int, push a new node on the front
of the list. */
void push(struct Node** head_ref, int new_data)
{
/* allocate node */
struct Node* new_node =
(struct Node*) malloc(sizeof(struct Node));
/* put in the data */
new_node->data = new_data;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
/* Driver program to test count function*/
int main()
{
/* Start with the empty list */
struct Node* head = NULL;
/* Use push() to construct below list
1->12->1->4->1 */
push(&head, 1);
push(&head, 4);
push(&head, 1);
push(&head, 12);
push(&head, 1);
printf("\n Deleting linked list");
deleteList(&head);
printf("\n Linked list deleted");
}
Java
// Java program to delete a linked list
class LinkedList
{
Node head; // head of the list
/* Linked List node */
class Node
{
int data;
Node next;
Node(int d) { data = d; next = null; }
}
/* Function deletes the entire linked list */
void deleteList()
{
head = null;
}
/* Inserts a new Node at front of the list. */
public void push(int new_data)
{
/* 1 & 2: Allocate the Node &
Put in the data*/
Node new_node = new Node(new_data);
/* 3. Make next of new Node as head */
new_node.next = head;
/* 4. Move the head to point to new Node */
head = new_node;
}
public static void main(String [] args)
{
LinkedList llist = new LinkedList();
/* Use push() to construct below list
1->12->1->4->1 */
llist.push(1);
llist.push(4);
llist.push(1);
llist.push(12);
llist.push(1);
System.out.println("Deleting the list");
llist.deleteList();
System.out.println("Linked list deleted");
}
}
// This code is contributed by Rajat Mishra
Python3
# Python3 program to delete all
# the nodes of singly linked list
# Node class
class Node:
# Function to initialise the node object
def __init__(self, data):
self.data = data # Assign data
self.next = None # Initialize next as null
# Constructor to initialize the node object
class LinkedList:
# Function to initialize head
def __init__(self):
self.head = None
def deleteList(self):
# initialize the current node
current = self.head
while current:
prev = current.next # move next node
# delete the current node
del current.data
# set current equals prev node
current = prev
# In python garbage collection happens
# therefore, only
# self.head = None
# would also delete the link list
# push function to add node in front of llist
def push(self, new_data):
# Allocate the Node &
# Put in the data
new_node = Node(new_data)
# Make next of new Node as head
new_node.next = self.head
# Move the head to point to new Node
self.head = new_node
# Use push() to construct below
# list 1-> 12-> 1-> 4-> 1
if __name__ == '__main__':
llist = LinkedList()
llist.push(1)
llist.push(4)
llist.push(1)
llist.push(12)
llist.push(1)
print("Deleting linked list")
llist.deleteList()
print("Linked list deleted")
# This article is provided by Shrikant13
C#
// C# program to delete a linked list
using System;
public class LinkedList
{
Node head; // head of the list
/* Linked List node */
class Node
{
public int data;
public Node next;
public Node(int d)
{
data = d; next = null;
}
}
/* Function deletes the entire linked list */
void deleteList()
{
head = null;
}
/* Inserts a new Node at front of the list. */
public void push(int new_data)
{
/* 1 & 2: Allocate the Node &
Put in the data*/
Node new_node = new Node(new_data);
/* 3. Make next of new Node as head */
new_node.next = head;
/* 4. Move the head to point to new Node */
head = new_node;
}
// Driver code
public static void Main(String [] args)
{
LinkedList llist = new LinkedList();
/* Use push() to construct below list
1->12->1->4->1 */
llist.push(1);
llist.push(4);
llist.push(1);
llist.push(12);
llist.push(1);
Console.WriteLine("Deleting the list");
llist.deleteList();
Console.WriteLine("Linked list deleted");
}
}
// This code has been contributed by Rajput-Ji
Javascript
输出
Deleting linked list
Linked list deleted
时间复杂度: O(n)
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。