NSU-HCCccc 2022-01-12 20:17 采纳率: 0%
浏览 35

如何填写翻转链表的reverse函数



#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>



struct Node { // 定义结点结构体

    int data;

    Node* next;

};

typedef Node* list; // 所谓单链表,就是指向头结点的指针



list Init(); // 创建并返回带头结点的空链表

void PushFront(list l, int data); // 在单链表的最前面插入一个数值域为data的节点

void PrintList(list l); // 打印单链表

void Reverse(list l); // 单链表逆序



int main() {

    list l = Init(); // 创建并初始化一个带头结点的单链表

    for (int i = 1; i <= 9; ++i) // 把1~9依次插入到单链表的最前面

        PushFront(l, i);

    PrintList(l); // 9->8->7->6->5->4->3->2->1

    Reverse(l); // 逆序

    PrintList(l); // 1->2->3->4->5->6->7->8->9

}



// 创建并返回带头结点的空链表

list Init() {

    Node* p = new Node{ 0,nullptr }; // 创建头结点,数值域为0,指针域为空

    return p;

}



// 打印单链表

void PrintList(list l) {

    Node* p = l->next; // p指向第一个节点

    while (p != nullptr) { // 当p不为空

        printf("%d", p->data); // 输出p的数值域

        p = p->next; // p指向下一个节点

        if (p) printf("->"); // 如果有下一个节点,输出箭头

    }

    printf("\n");

}



// 在单链表的最前面插入一个数值域为data的节点

void PushFront(list l, int data) {

    Node* p = new Node{ data, l->next };

    l->next = p;

}



void Reverse(list l) {
 
    请填写代码
    
}
  • 写回答

3条回答 默认 最新

  • _GX_ 2022-01-12 21:13
    关注
    void Reverse(list l)
    {
        Node *p = l->next;    // p指向当前节点
        Node *prev = nullptr; // prev指向前一个节点
        while (p) {
            Node *next = p->next;
            p->next = prev; // 反转
            prev = p;  // 移到下一个节点
            p = next;
        }
        l->next = prev; // 让头节点指向最后一个节点
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办