倒序链表(改变内存地址)(两种)

//倒序链表1

node *reserved_list(node *head)

{

node *z_head=NULL,*z_read=NULL;

//我要把第一个变成最后一个 那么第一个的next指针域就要是NULL

//但是我每次都要改变head的指向,最终返回的是head

//所以我就把head用一个东西来代替

z_head=head;

head=NULL;

//z_read是用来给z_head赋值的 使z_head可以遍历整个链表 也就是当p为NULL的时候整个链表才结束

while(z_head!=NULL)

{

z_read=z_head->next; //这里把z_read指向z_head的下一个节点

z_head->next=head; //实现第一个节点的next域为NULL 之后每个节点的next域都指向上一个head节点

head=z_head;//这样写head每次就代替了这个节点 每次都这样就实现了head最终指向最后一个节点

z_head=z_read;//最终我是要把这两个值互换的

}

return head;

}


//倒序链表2

node *reserved_list2(node *head)

{

if(head==NULL)

{

return NULL;

}

node *z_read=NULL, *zh_read=NULL;

//用来依次遍历链表的递减指针用来赋值给z_read的指针

node *tail=NULL, *z_tail=NULL;

//为最终的返回指针 用来(指向tail节点的下一个节点)的指针

//因为最后返回指针不是head指针 所以head不用移动 而作为一个结束的标志

while(head!=z_tail)//最终是要让tail为开头的链表的最后一个节点为head

{

z_read=zh_read=head;

//把这个指针继承head链条 之所以放在循环里面是因为zh_read 和 z_read 两个同时都在改变位置

//而每次都要让zh_read 和 z_read 往前移动一个位置 那么每次就都要重新遍历zh_read 和 z_read

//同时还要设立一个新的条件 就是让z_read不等于z_tail

while(z_read->next!=NULL)

{

zh_read=z_read;//经过这个循环每次的z_read指向的都是z_tail的前一个节点

z_read=z_read->next;

//而每次zh_read指向的是z_read的前一个节点

//这样一直循环 最后会让z_read为head

}

zh_read->next=NULL; //这样每次就把z_head所指向的节点分离出来,就不和head相连了

//前一种是因为head每次都在移动 最后head就指向了最后一个节点

//而这里的head没有移动 但是我想让他的内存地址改变 那么我就要把每次的数据分离

if(tail==NULL)

{

tail=z_tail=z_read; //既然tail作为链条的头部那么他就要有值

}

else

{

z_tail->next=z_read; //结束条件是 head!=z_tail z_read每次在移动 那么z_tail也要移动

z_tail=z_read; //这样z_tail到最后指向的就是head节点了

}

}

return tail;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值