m0_62171184 2021-10-29 21:20 采纳率: 100%
浏览 23
已结题

读不懂这里的逻辑,有人可以给解决一下吧

img

  • 写回答

2条回答 默认 最新

  • 关注
    理解这个逻辑的前提是:这个L节点(头结点)是不存储数据的,也就是说从L->next开始存储数据。
    假如链表中存了1 2 3 4 55个数据,1存储在L->next节点中,而不是L节点中。
    所以逆序后,L这个节点仍然是逆序后的链表的头结点,因为这个节点并不实际存储数据。
    实际的逆序是从L->next这个节点开始的。
    好的,下面来看看这个逻辑:
    
    L是头结点
    p = L->next; p是第二个节点
    L->next=NULL;把头结点的next设为空
    
    进入while循环后:
    q = p->next;  q是原链表的第三个节点
    p->next = L->next; 此时,L->next=NULL;也就是把第二个节点的next置为NULL,
    因为第二个节点逆序后,是链表的最后一个节点
    
    L->next = p; 让头结点的next指向p(逆序后的尾结点),此时链表中只有L和p两个节点
    
    p = q; //p变成原来链表的第三个节点
    
    进入下一次循环
    q = p->next;  q是原链表的第四个节点
    p->next = L->next; 原链表的第三个节点的next指向L->next,此时L->next是原链表的第二个节点,
    L-next = p; 头节点的next指向p,
    到这里看明白了吗,经过这几个步骤以后,链表中有三个节点,也就是原链表的前三个节点
    头结点L还是原来的头结点,现在的第二个节点变成了原链表的第三个节点,
    原链表的第二个节点变成了现在的第三个节点(尾结点)
    也就是相当于把原链表的第三个节点,插入到第一个节点和第二个节点之间了。
    
    这下明白了吧。
    
    整个逻辑就是,L还是头结点,原来的第二个节点逆序后变成了尾节点,其他的节点逐个往L节点后面插,
    每次都是插入到L后面,这样整个链表就实现了逆序。
    
    所以,如果不理解L节点不存储数据这个前提,是理解不了这个逻辑的。
    
    如有帮助,请帮忙采纳一下,谢谢。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月6日
  • 已采纳回答 10月29日
  • 创建了问题 10月29日

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog