链表逆置

本文通过一个简单的C++程序介绍了如何实现链表的基本操作,包括节点的插入,并详细展示了链表反转的过程及注意事项。文章特别强调了传递指针的重要性以确保能够正确地修改原始链表。

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

首先贴正确的代码
#include"iostream"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct node 
{
    int x;
    node *next;
}nodex;
int charu(nodex *root,int cmp);
void fanzhi(nodex **root);
int main()
{
nodex* root=(nodex*)malloc(sizeof(nodex));
root->x=8;
root->next=NULL;
for(int i=0;i<8;i++)
charu(root,i);
nodex *p=root;
while(p)
{cout<<p->x;
p=p->next;
}
cout<<'\n';
fanzhi(&root);
p=root;
while(p)
{cout<<p->x;
p=p->next;
}
}
int charu(nodex *root,int cmp)//头插法
{
	nodex* q=(nodex*)malloc(sizeof(nodex)); 
	q->x=cmp;
	q->next=root->next;
	root->next=q;
	return 0;   
}
void fanzhi(nodex **root)
{
  nodex *pre=*root;
  nodex *now=(*root)->next;
  (*root)->next=NULL;
  while(now)
  {
    nodex *pre_tmp=pre;
    nodex *now_tmp=now;
    pre=now;
    now=now->next;
    now_tmp->next=pre_tmp;   
  }
*root=pre; }

想了想思路,就按着自己的思路写。。。不写不知道,一写吓一跳,这么简单地问题都难道我了,悲剧啊!!!!!! fanzhi()函数中首先写的是

while(now)
  {
    nodex *pre_tmp=pre;
    nodex *now_tmp=now;
    pre=pre->next;   
    now=now->next;
    now_tmp->next=pre_tmp;  
  }
pre一下子成死循环了。

下来搞定pre了,接着刚开始的fanzhi函数是这么定义的:void fanzhi(nodex *root)

估计还有的人没注意这点:传进来的其实只是一个数,改变root的值根本不能改变root中存储的地址数要想改变root中存储的地址数,

只能这样nodex **root,传进去的是指向root的指针,*root其实就是root中存储的地址数。所以就能修改root的值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值