c++反转链表

c++反转链表

c++反转链表

在数据结构和算法中,链表是一种常见的数据结构,它由节点组成,每个节点包含数据和一个指向下一个节点的指针。反转链表是一个常见的问题,涉及将链表中的节点顺序颠倒。在本文中,我们将使用C++语言实现如何反转一个链表。我们将介绍反转链表的概念,讨论算法实现细节,并给出C++代码示例。

反转链表的概念

反转链表是指将链表中的节点顺序颠倒,使链表的尾部成为头部,头部成为尾部。例如,对于一个链表1->2->3->4->5,反转之后变为5->4->3->2->1。

算法实现

下面我们来讨论一种基于迭代的算法来反转链表。算法的基本思路如下:

  1. 初始化三个指针prev、curr、next,分别指向当前节点的前一个节点、当前节点和当前节点的下一个节点。
  2. 遍历链表,直到当前节点为空:
  • 将当前节点的next指针指向prev,完成当前节点的反转。
  • 更新prev、curr、next指针,将它们向右移动一个位置。
    1. 最后返回prev指针作为新链表的头节点。

C++代码实现

下面是用C++实现反转链表的示例代码:

#include <iostream>

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

ListNode* reverseList(ListNode* head) {
    ListNode* prev = nullptr;
    ListNode* curr = head;
    ListNode* next = nullptr;

    while (curr != nullptr) {
        next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }

    return prev;
}

int main() {
    ListNode* head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);
    head->next->next->next = new ListNode(4);
    head->next->next->next->next = new ListNode(5);

    ListNode* newHead = reverseList(head);

    while (newHead != nullptr) {
        std::cout << newHead->val << " ";
        newHead = newHead->next;
    }

    return 0;
}

在上面的示例代码中,我们定义了一个结构体ListNode,表示链表的节点。reverseList函数接收一个头节点指针,然后对链表进行反转。在main函数中,我们创建了一个包含5个节点的链表,并调用reverseList函数进行反转。最后遍历新链表,输出节点的值。

运行结果

如果我们运行上面的示例代码,将会得到以下输出:

5 4 3 2 1

这表明链表成功地被反转了,尾部节点变成了头部节点,头部节点变成了尾部节点。

总结

在本文中,我们详细介绍了如何使用C++语言实现反转链表的算法。我们讨论了反转链表的概念,解释了算法实现的细节,并给出了完整的C++代码示例。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程