C++编程实现单向链表建立、删除、插入、输出
时间: 2023-10-08 20:06:55 浏览: 137
以下是一个简单的基于C++的单向链表的实现,其中包含了节点的插入、删除和输出等操作。
```c++
#include<iostream>
using namespace std;
// 链表节点结构体
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 链表类
class LinkedList {
public:
LinkedList() {
head = new ListNode(0);
}
// 在链表的末尾添加一个节点
void addNode(int val) {
ListNode *cur = head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new ListNode(val);
}
// 在链表中插入一个节点
void insertNode(int pos, int val) {
ListNode *cur = head;
for (int i = 0; i < pos; i++) {
cur = cur->next;
}
ListNode *newNode = new ListNode(val);
newNode->next = cur->next;
cur->next = newNode;
}
// 删除链表中的一个节点
void deleteNode(int val) {
ListNode *cur = head;
while (cur->next != NULL) {
if (cur->next->val == val) {
ListNode *temp = cur->next;
cur->next = temp->next;
delete temp;
return;
}
cur = cur->next;
}
}
// 输出链表中的所有节点
void printList() {
ListNode *cur = head->next;
while (cur != NULL) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
private:
ListNode *head; // 链表头节点
};
int main() {
LinkedList list;
list.addNode(1);
list.addNode(2);
list.addNode(3);
list.addNode(4);
list.addNode(5);
cout << "链表初始状态:" << endl;
list.printList();
list.insertNode(2, 6);
cout << "插入节点后:" << endl;
list.printList();
list.deleteNode(3);
cout << "删除节点后:" << endl;
list.printList();
return 0;
}
```
运行结果如下:
```
链表初始状态:
1 2 3 4 5
插入节点后:
1 2 6 3 4 5
删除节点后:
1 2 6 4 5
```
在该实现中,每个节点都是一个 `ListNode` 结构体,其中包含了一个 `val` 值和一个指向下一个节点的 `next` 指针。`LinkedList` 类中的 `head` 指针指向链表的头节点,初始时为空节点。`addNode` 方法用于在链表的末尾添加一个节点,`insertNode` 方法用于在指定位置插入一个节点,`deleteNode` 方法用于删除一个指定值的节点,`printList` 方法用于输出链表中的所有节点。
阅读全文