单链表倒置,给你一个头指针,用递归与非递归的方法分别实现;

本文详细介绍了链表倒置的两种实现方式:循环与递归。通过实例解析了每一步操作,帮助读者深入理解链表倒置的具体过程及其实现技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //  [9/30/2013 qingezha] 链表倒置 循环与递归形式
// 一般形式,1—>2->3->4 现在1<-2<-3<-4  那么改变1的next的时候需要保存指向2的指针,然后同理处理2
// 需要保存的,用直译(见词知意)的表达出来比如:pre前面,next后面,cur当前,然后循环后赋新值
LinkPtrs reverse_link(LinkPtrs root) //头指针指向的是第一个元素
{
 if(root == NULL)
  return NULL;
 LinkPtrs nextp = root->next;  //第一个结点
 LinkPtrs pre = root;   //保留前端
 LinkPtrs temp = NULL;
 LinkPtrs reverseHead = NULL;
 pre -> next = NULL;
 while(nextp->next)
 {
  temp = nextp -> next;  //先要保存下一个指针
  nextp -> next = pre;
  pre = nextp;
  nextp = temp;
 }
 nextp -> next = pre;
 reverseHead = nextp;
 return reverseHead;
}
//链表倒置,切记 方法很巧!!!!!!!!!!!!!!!!!!
LinkPtrs reverse_link_recursive(LinkPtrs root)
{
 if(root == NULL)
  return NULL;
 LinkPtrs cur,temp,revers_head;
 if(root->next == NULL)
  return root;   //链表如果只有一个结点,那么直接返回第一个
 else
 {
  cur = root;
  temp = cur -> next;  //temp 为2->3->4的头指针
  //可以认为后面的都已经倒过来了,且认为revers_head 为倒过来的链表的头指针
  //这样理解就容易多了
  revers_head = reverse_link_recursive(temp);
  temp -> next = cur;
  cur -> next = NULL;
 }
 return revers_head;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值