首页 > 其他分享 >PTA 6.1单链表的逆转

PTA 6.1单链表的逆转

时间:2024-09-08 23:26:03浏览次数:14  
标签:单链 List PtrToNode PTA Next len 6.1 NULL ptr

  这道题也是体验到了面向答案编程的过程,根据测试时系统反馈的错误点,不断更进完善,缝缝补补最后得到通过审核的代码

本题要求实现一个函数,将给定的单链表逆转。

正确答案:

List Reverse(List L)
{
    PtrToNode ptr = L;
    int len = 0;
    PtrToNode temp=NULL;
    while (ptr!= NULL)
    {
        len++;               //遍历链表计算长度;
        ptr = ptr->Next;
    }
    if(len==0)
    {
        return NULL;          //空表直接返回NULL;
    }
    else
    {
    PtrToNode p=L;
    PtrToNode q=L->Next;   //在代码中不断写p->Next->Next显得代码好low,于是果断用q简化;
    for (int i =0; i<len-1; i++)
        {
        temp=q->Next;
        q->Next=p;
        p=q;
        q=temp;
        }
    L->Next = NULL;      //要记得将第一个节点(也就是逆转后的最后一个节点)的指针域置空;
    return p;
    }
}

 在这过程中我写出了好几个版本的错误代码,以下是其中一个版本,读者们动动脑看能否看出来:

List Reverse(List L)
{
    PtrToNode ptr = L;
    int len = 0;
    PtrToNode temp=NULL;
    while (ptr!= NULL)
    {
        len++;
        ptr = ptr->Next;
    }
    if(len==0)
    {
        return NULL;
    }
    else
    {
    PtrToNode p=L;
    PtrToNode q=L->Next;
    for (int i =0; i<len-1; i++)
        {
        temp=q->Next;
        q->Next=p;
        p=q;
        q=temp;
        }
    L->Next = NULL;
    return L;
    }
}

这个代码不运行,光靠理论下来好像和上面区别不大,但用题给数据一运行,答案使你眼前一亮,我这脑子便如豆腐脑一样(一团浆糊),经过我的又一次理论分析一点毛病没有,于是又荒废了一个下午(头发都掉光了-呜呜呜);于是我便开始分析运行的正确答案,终于,原来传回去的不再是L,而是逆转后的头节点地址;

题上没给其它两个函数的具体代码,但凭借英文单词大概猜一下:

List Read();         //读取一个链表给L;
void Print( List L );   //从新的头节点开始遍历整个链表;

将题给信息分析明确很重要,不然就直接开始我们的面向结果编程吧!

   又是忙忙碌碌,掉发的一天!读者有问题可以直接提出来,我们可以交流学习,共同进步;

  也有可能你提的问题太高深,我也不会,望大佬见谅;

标签:单链,List,PtrToNode,PTA,Next,len,6.1,NULL,ptr
From: https://blog.csdn.net/2403_82588765/article/details/142034891

相关文章

  • PTA 7-12 龟兔赛跑
    龟兔赛跑(20分)乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直......
  • 003——单链表
    1.链式存储的特点逻辑(通过指针实现)上相邻,物理上可相邻可不相邻2.结点(节点都可以)4(&8)8(&6)6(&1)1(&9)9(NULL)4后面存上8的地址8后面存上6的地址6后面存上1的地址1后面存上9的地址9后面存上空地址也就是说,在链表中,需要存储:数据本身+下一个数据的地址,大体结构如下:数......
  • PTA 7-3-1 换硬币(C语言)
    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?输入格式:输入在一行中给出待换的零钱数额x∈(8,100)。输出格式:要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量,fen2:2分硬币数量,......
  • 【数据结构】单链表专题
    链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的结构跟火车车厢相似,淡季时车次的车厢会相应减少,旺季时车次的车厢会额外增加几节。只需要将火车里的某节车厢去掉/加上,不会影响其他车......
  • 数据结构基础讲解(二)——线性表之单链表专项练习
    本文数据结构讲解参考书目:通过网盘分享的文件:数据结构 C语言版.pdf链接: https://pan.baidu.com/s/159y_QTbXqpMhNCNP_Fls9g?pwd=ze8e 提取码:ze8e 上一节我讲了线性表中顺序表的定义以及常用的算法,那么这节我将继续讲解顺序表中的链式结构以及常见的算法。数据......
  • ipvs为什么比iptables效率高
    IPVS(IPVirtualServer)相较于iptables在处理网络流量时效率更高,主要原因有以下几点:1.内核空间与用户空间IPVS:完全在内核空间中运行,直接处理网络数据包的转发,这样可以减少上下文切换和系统调用的开销。iptables:虽然也能在内核空间工作,但其某些操作涉及到用户空间,例如在管理规......
  • 【CUDA12安装包】CUDA 12.6.1 及其配套的 cuDNN 8.9.7.29
    CUDA12.6.1及其配套的cuDNN8.9.7.29【均来自英伟达官网】【Windows11】链接:https://pan.baidu.com/s/1wTluMG1-KbOZCOZfcxqsrw?pwd=2rqg提取码:2rqg内容:cuda_12.6.1_560.94_windows.exe(560.94是要求最低显卡驱动版本)cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip......
  • Linux 内核 6.11 RC6 发布!
    2024年9月2日,Linux内核开发者LinusTorvalds宣布了Linux内核6.11的第六个候选版本(RC6)的发布。与以往的发布时间相比,由于Torvalds正在国外旅行,这次的RC6提前半天发布。这是6.11版本开发周期的又一部分,主要是继续修复和稳定系统的各个组成部分,特别是文件系统、......
  • Apple 重發iOS 17.6.1 修正版
    蘋果又再次替iPhone和iPad用戶釋出iOS17.6.1更新(21G101),這次更新與8日所推出的 iOS17.6.1正式版相同,官方在更新說明內也沒有提到任何修改,依舊是維持修正進階資料保護的問題iOS17.6.1更新修正版內容重點整理1.系統內部版本號不同最早iOS17.6.1正式版是在8月8日......
  • 6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)
    目录一.堆(Heap)的基本介绍二.堆的常用操作(以小根堆为例)三.实现代码3.1堆结构定义3.2向下调整算法*3.3初始化堆*3.4销毁堆3.4向上调整算法* 3.5插入数据3.6删除数据3.7返回堆顶数据四.下篇内容1.堆排序2.TopK问题一.堆(Heap)的基本介绍    ......