带头结点的单向链表的操作算法的代码
时间: 2023-05-29 22:01:25 浏览: 83
以下是带头结点的单向链表的基本操作算法的代码,包括插入、删除、查找、遍历等:
```c++
#include <iostream>
using namespace std;
typedef struct Node {
int value;
Node* next;
} Node;
typedef Node* LinkList;
LinkList initList() {
LinkList head = new Node();
head->next = NULL;
return head;
}
void addNode(LinkList head, int value) {
Node* node = new Node();
node->value = value;
node->next = head->next;
head->next = node;
}
void deleteNode(LinkList head, int value) {
Node* p = head->next;
Node* pre = head;
while (p != NULL) {
if (p->value == value) {
pre->next = p->next;
delete p;
return;
}
pre = p;
p = p->next;
}
}
Node* searchNode(LinkList head, int value) {
Node* p = head->next;
while (p != NULL) {
if (p->value == value) {
return p;
}
p = p->next;
}
return NULL;
}
void traverseList(LinkList head) {
Node* p = head->next;
while (p != NULL) {
cout << p->value << " ";
p = p->next;
}
cout << endl;
}
int main() {
LinkList head = initList();
addNode(head, 1);
addNode(head, 2);
addNode(head, 3);
addNode(head, 4);
addNode(head, 5);
cout << "Original List: ";
traverseList(head);
deleteNode(head, 4);
cout << "After deleting 4: ";
traverseList(head);
cout << "Searching for 2: " << endl;
if (searchNode(head, 2) != NULL) {
cout << "Found" << endl;
} else {
cout << "Not Found" << endl;
}
return 0;
}
```