ZBLOG

单向链表倒序算法

以下是一个单向链表倒序的算法示例:

#include <iostream>

struct Node {
    int data;
    Node* next;
};

// 插入节点到链表头部
void insertNode(Node** head, int data) {
    Node* newNode = new Node();
    newNode->data = data;
    newNode->next = *head;
    *head = newNode;
}

// 遍历并打印链表
void printList(Node* node) {
    while (node != nullptr) {
        std::cout << node->data << " ";
        node = node->next;
    }
    std::cout << std::endl;
}

// 倒序单向链表
Node* reverseList(Node* head) {
    if (head == nullptr || head->next == nullptr)
        return head;

    Node* prev = nullptr;  // 指向前一个节点
    Node* curr = head;     // 当前节点
    Node* next;

    while (curr != nullptr) {
        next = curr->next;   // 保存下一个节点

        // 反转当前节点指针指向前一个节点
        curr->next = prev;

        // 移动prev和curr指针继续遍历链表
        prev = curr;
        curr = next;
    }

    return prev;  // 返回反转后的头结点(原链表尾结点)
}

int main() {
    Node* head = nullptr;

    // 创建测试链表: 1 -> 2 -> 3 -> 4 -> 5
    for (int i = 5; i > 0; --i)
        insertNode(&head, i);

    std::cout << "Original List: ";
    printList(head);

    head = reverseList(head);

    std::cout << "Reversed List: ";
    printList(head);

    return 0;
}

上述代码中,首先定义了一个表示节点的结构体 Node,包含一个整数数据成员 data 和指向下一个节点的指针 next。然后实现了插入节点到链表头部的函数 insertNode()、遍历并打印链表的函数 printList()、以及倒序单向链表的函数 reverseList()

在主函数中,首先创建一个测试链表(1 -> 2 -> 3 -> 4 -> 5),然后调用 reverseList() 函数对链表进行倒序操作,并通过调用 printList() 函数打印出结果。

输出示例:

Original List: 1 2 3 4 5
Reversed List: 5 4 3 2 1

该算法通过维护两个指针(prev 和 curr)以及临时变量 next 来完成单向链表的倒序操作,最后返回反转后的头结点。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=11763

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?