c语言中单链表的逆置

单链表的逆置方法这里介绍两种(头插法和原地逆置法)

  • 头插法
    通过两个指针的移动,以原表的头指针为中间量,让原表的元素依次连接在逆置表的表头
typedef struct node 
{
    int data;
    struct node *next;
}Node;
Node *converse(Node*head)
{
Node *p,*q;
p=head->next;//p指向原表第一个数据元素
head->next=NULL;//逆置表初始为空
while(p)//p指到原表尾的next跳出
{
/*移动*/
  q=p;
  p=p->next;
/*插入*/
q->next=head->next;//通过中间量(逆置表的表头)连接
head->next=q;//head始终指向p的前一个元素(用q存储)
return head;
}
}

*输出时应注意此时逆置表是一个有表头结点的单链表

  • 原地逆置法
    利用函数的递归调用找到尾结点,然后通过回溯
    逆序。
Node *converse (Node* head)
{
 Node*base;
  if(head->next==NULL)
  return head;
  /*递归*/
  base=coverse(head->next);
  //递归结束后head为尾结点的前驱 
  /*回溯*/
  head->next->next=head
  head->next=NULL;
  return base;//逆置表的表头

此时逆置表为无表头结点的单链表

若有不妥之处,恳请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值