C++ 链表遍历
时间: 2023-06-28 20:08:08 浏览: 50
C++ 中的链表遍历可以使用循环或递归两种方式实现。
循环遍历:
```c++
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void traverseList(ListNode* head) {
ListNode* cur = head;
while (cur != NULL) {
// 处理当前节点
cout << cur->val << " ";
// 移动到下一个节点
cur = cur->next;
}
}
```
递归遍历:
```c++
void traverseList(ListNode* head) {
if (head == NULL) {
return;
}
// 处理当前节点
cout << head->val << " ";
// 遍历下一个节点
traverseList(head->next);
}
```
以上两种方式都可以实现链表的遍历,循环方式通常更加高效,而递归方式则更加简洁易懂。
相关问题
c++ 链表反向遍历
C++中的链表反向遍历可以通过递归或者使用栈来实现。下面是两种方法的介绍:
1. 递归方法:
链表的反向遍历可以通过递归来实现。具体步骤如下:
- 首先,定义一个递归函数,该函数接受一个指向链表节点的指针作为参数。
- 在递归函数中,先递归调用自身,传入下一个节点的指针。
- 然后,在递归函数的末尾,输出当前节点的值。
以下是一个示例代码:
```cpp
void reverseTraversal(Node* node) {
if (node == nullptr) {
return;
}
reverseTraversal(node->next);
cout << node->data << " ";
}
```
2. 使用栈:
另一种方法是使用栈来实现链表的反向遍历。具体步骤如下:
- 首先,创建一个空栈。
- 然后,从链表的头节点开始,将每个节点依次压入栈中,直到链表的末尾。
- 最后,从栈顶开始依次弹出节点,并输出节点的值。
以下是一个示例代码:
```cpp
void reverseTraversal(Node* head) {
stack<Node*> s;
Node* current = head;
while (current != nullptr) {
s.push(current);
current = current->next;
}
while (!s.empty()) {
Node* node = s.top();
cout << node->data << " ";
s.pop();
}
}
```
c++ 链表 添加 遍历 删除
链表是一种常见的数据结构,用于存储一系列数据元素。在链表中,每个数据元素都包含一个指向下一个元素的指针。下面分别介绍链表的添加、遍历和删除操作:
添加操作指的是在链表的末尾添加一个新的元素。添加一个新元素时,只需将新元素的指针指向链表的末尾,并更新原链表的尾部指针。具体步骤如下:首先,找到链表的尾部,即指针为空的结点;然后,创建一个新结点,将新结点的值赋给新元素,并将原链表的尾部指针指向新结点。
遍历操作指的是按照链表的顺序依次访问每个元素。为了实现遍历操作,需要使用一个指针来指向链表的头部,然后依次向后遍历链表,直到指针为空。在遍历过程中,可以对每个元素进行相应的处理,如打印或进行计算等。
删除操作指的是从链表中移除一个元素。删除一个元素时,需要找到目标元素的前一个元素,将其指针指向目标元素的下一个元素,然后释放目标元素所占用的内存空间。具体步骤如下:首先,找到目标元素的前一个元素;然后,将目标元素的下一个元素的地址赋值给前一个元素的指针,跳过目标元素;最后,释放目标元素所占用的内存空间。
综上所述,链表的添加操作需要找到链表尾部,并将新元素添加到链表末尾;遍历操作需要使用指针依次访问每个元素;删除操作需要找到目标元素的前一个元素,并将其指针指向目标元素的下一个元素。这些操作使得链表具有动态性和灵活性,适用于各类数据结构的实现和应用。