创建单链表添加,删除 遍历
时间: 2024-10-23 21:05:27 浏览: 11
创建单链表主要包括节点的定义、链表的初始化以及基本的操作——添加(append)、删除(delete)和遍历(traverse)。
1. **节点定义**:单链表的基本组成是节点,每个节点包含两个部分:数据域(存放数据)和指针域(指向下一个节点)。例如,在C++中可以这样定义:
```cpp
struct ListNode {
int val; // 数据
ListNode* next; // 指向下一个节点的指针
ListNode(int x) : val(x), next(nullptr) {} // 构造函数
};
```
2. **链表初始化**:一般创建一个空链表,头部节点next指针设为nullptr。如果需要创建非空链表,可以在构造函数中传入第一个元素及其后续元素。
3. **添加操作**(append):在链表末尾添加新节点,可以设置新节点的next为当前最后一个节点,然后更新最后一个节点的next为新节点。
```cpp
void append(ListNode*& head, int value) {
if (head == nullptr) {
head = new ListNode(value);
} else {
ListNode* last = head;
while (last->next != nullptr) {
last = last->next;
}
last->next = new ListNode(value);
}
}
```
4. **删除操作**(delete):根据给定条件(如值或位置)删除节点。若要删除特定值的节点,需找到该节点并更新前一个节点的next;若要删除指定位置的节点,从头开始遍历直到找到目标位置。
```cpp
void deleteNode(ListNode*& head, int targetValue) {
if (head == nullptr) return;
if (head->val == targetValue) {
ListNode* temp = head;
head = head->next;
delete temp;
return;
}
ListNode* prev = head;
while (prev->next != nullptr && prev->next->val != targetValue) {
prev = prev->next;
}
if (prev->next != nullptr) {
ListNode* temp = prev->next;
prev->next = prev->next->next;
delete temp;
}
}
```
5. **遍历操作**(traverse):通常通过一个循环结构访问链表中的每一个节点,并打印其值。
```cpp
void traverse(const ListNode* head) {
ListNode* curr = head;
while (curr != nullptr) {
std::cout << curr->val << " ";
curr = curr->next;
}
std::cout << std::endl;
}
```
阅读全文