本文包含了鏈表的常用操作,包括創建鏈表、插入節點、刪除節點、遍歷鏈表、求鏈表長度和刪除鏈表,使用c++實現。
#include <iostream>
#include <cstdio>
using namespace std;
struct Node
{
int data;
Node* next;
};
//在鏈表中插入值為data的節點
void insert(Node* head, int data)
{
Node* node = new Node();
node->data = data;
node->next = head->next;
head->next = node;
}
//在值為elem的節點后插入值為data的結點
void insertAfter(Node* head, int elem, int data)
{
Node* node = head->next;
while(node!=nullptr && node->data!=elem)
node = node->next;
if(node==nullptr)
{
cout<<"找不到值為"<<elem<<"的結點"<<endl;
return;
}
Node* newNode = new Node();
newNode->data = data;
newNode->next = node->next;
node->next = newNode;
}
//在鏈表最后添加一個值為data的節點
void append(Node* head, int data)
{
Node* node = head;
while(node->next!=nullptr)
node = node->next;
Node* newNode = new Node();
newNode->data = data;
newNode->next = node->next;
node->next = newNode;
}
//刪除值為data的節點
void deleteNode(Node* head, int data)
{
Node* node = head;
while(node->next!=nullptr && node->next->data!=data)
node = node->next;
if(node->next==nullptr)
{
cout<<"找不到值為"<<data<<"的結點"<<endl;
return;
}
Node* temp = node->next;
node->next = node->next->next;
delete temp;
}
//鏈表長度
int length(Node* head)
{
int len = 0;
Node* node = head->next;
while(node!=nullptr)
{
len++;
node = node->next;
}
return len;
}
//遞歸刪除鏈表
void deleteLinkList(Node* head)
{
if(head->next!=nullptr)
deleteLinkList(head->next);
delete(head);
}
//打印鏈表
void print(Node* head)
{
Node* node = head->next;
while(node!=nullptr)
{
cout<<node->data<<" ";
node = node->next;
}
cout<<endl;
}
int main()
{
Node* head = new Node(); //頭結點
int n; //鏈表中的元素個數
cin>>n;
for(int i=0; i<n; i++)
{
int t;
cin>>t;
insert(head, t);
}
print(head);
cout<<length(head)<<endl;
insertAfter(head, 2, 4);
print(head);
cout<<length(head)<<endl;
append(head, 5);
print(head);
cout<<length(head)<<endl;
deleteNode(head, 5);
print(head);
cout<<length(head)<<endl;
deleteLinkList(head);
return 0;
}