单向列表的逆转

单向列表的逆转

将给定一个单链表L,使用自行设计的函数 Reverse将链表L就地逆转,在不申请新的结点的情况下,
将链表的第一个元素转为最后一个元素,第二个元素转为倒数第二个元素,以此类推。

分析思路

利用循环,从链表头开始逐个处理。循环设计中如何把握住循环不变式。

循环不变式:一种在循环过程进行时不发生改变的性质,不依赖于前面所执行过程的重复次数的多少。

在每轮循环开始前我们都面临两个链表,其中 Old_head是一个待逆转的链表(“旧”的链表头),而New_head是一个已经逆转好的链表(“新”的链表头) ,每轮循环的目的是把Old_head 中的第一个元素插入到New_head的头上,这轮循环执行好后,0ld_head 和 New_head还是分别指向新的待逆转链表和已经逆转好的链表。


实现代码

tpyedef struct Node *PtrToNode;

struct Node {
  ElementType Data; //存储结点数据
  PtrToNode   Next;
};

List Reverse(list L){
  /*将单向链表L逆转*/
  PtrToNode Old_head, New_head, Temp;
  Old_head = L;     //初始化就表头为L
  New_head = NULL;  // 初始化逆转后新表头为空
  while(Old_head){ //就表不为空
    Temp = Old_head->Next;
    Old_head->Next = New_head;
    New_head = Old_head; //将但钱表头逆转为新表头
    Old_head = Temp; //更新就表头 
  }
  L = New_head; //更新L
  return L;
};

实现过程无声讲解:

单向链表的逆转

需要ppt自取

我用夸克网盘分享了「单向链表的逆转.pptx」,链接:https://pan.quark.cn/s/f51426c1807c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值