数据结构:链表应用:第8关:链表的逆转


任务描述

本关任务:利用单链表表示一个整数序列,通过一趟遍历,将单链表中所有结点的链接方向逆转。要求空间复杂度为O(1)。

编程要求

输入

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。

输出

对于每组数据分别输出一行,逆序输出链表中的元素,元素之间用空格分隔。

测试说明

平台会对你编写的代码进行测试:

测试输入: 5 1 2 3 4 5 6 3 1 2 5 4 6 0

预期输出: 5 4 3 2 1 6 4 5 2 1 3

来源

BJFUOJ


开始你的任务吧,祝你成功

关键在于L->next,也就是头结点的指针域。它在循环的过程中,始终指向逆置的结点(也就是需要改向的,那个结点的前一个),循环过程中p与q每次逆置向后移一位

cpp 复制代码
#include <iostream>
using namespace std;

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void CreateList_R(LinkList &L,int n)
{
    L->next=NULL;
    LinkList r=new LNode;
    r=L;
    for(int i=0;i<n;i++)
    {
        LinkList p=new LNode;
        cin>>p->data;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}

void Inverse(LinkList &L)
{//逆置带头结点的单链表L
/**************begin************/
   if(L == NULL || L->next == NULL) return; // 如果链表为空或只有一个节点,无需逆置,直接返回    a.
    LinkList p = L->next, q; // 初始化p指向第一个节点
    L->next = NULL; // 将头节点的next置为NULL   1.
    while(p ) {
        q = p->next; // 保存p的下一个节点     2.
        p->next = L->next; // 修改p的next指向
        L->next = p; // 修改头节点的next指向   3.
        p = q; // p移动到下一个节点 
    }



    /**************end************/
}

void PrintList(LinkList &L)
{
    L=L->next;
    while(L){
        if(L->next!=NULL) cout<<L->data<<" ";
        else cout<<L->data;
        L=L->next;
    }
    cout<<endl;
}

int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0) break;
        LinkList L=new LNode;
        CreateList_R(L,n);
        Inverse(L);
        PrintList(L);
    }
    return 0;
}
相关推荐
稚辉君.MCA_P8_Java1 小时前
Gemini永久会员 go数组中最大异或值
数据结构·后端·算法·golang·哈希算法
会员果汁1 小时前
双向链式队列-C语言
c语言·数据结构
AI科技星2 小时前
张祥前统一场论:引力场与磁矢势的关联,反引力场生成及拉格朗日点解析(网友问题解答)
开发语言·数据结构·经验分享·线性代数·算法
C雨后彩虹2 小时前
最少交换次数
java·数据结构·算法·华为·面试
-森屿安年-2 小时前
二叉平衡树的实现
开发语言·数据结构·c++
稚辉君.MCA_P8_Java2 小时前
Gemini永久会员 Go 返回最长有效子串长度
数据结构·后端·算法·golang
TL滕2 小时前
从0开始学算法——第五天(初级排序算法)
数据结构·笔记·学习·算法·排序算法
Ayanami_Reii3 小时前
进阶数据结构应用-线段树扫描线
数据结构·算法·线段树·树状数组·离散化·fenwick tree·线段树扫描线
浅川.253 小时前
xtuoj 素数个数
数据结构·算法
少许极端3 小时前
算法奇妙屋(十五)-BFS解决边权为1的最短路径问题
数据结构·算法·bfs·宽度优先·队列·图解算法·边权为1的最短路径问题