【100题】第二十四 反转链表

题目:新建一个链表,然后反转一下

#include <iostream.h> #include <malloc.h> using namespace std; struct node { int data; node *next; }; void insert(node *root,node *p) { p->next=root->next; root->next=p; } node *create(int a[],int n) { node *root=(node *)malloc(sizeof(node)); root->data=a[0]; root->next=NULL; for(int i=1;i<5;++i) { node *p = (node *)malloc(sizeof(node)); p->data=a[i]; p->next=NULL; insert(root,p); } return root; } node *reverse(node *root) { node *head=root; node *p; node *q; if(head) p=head->next; else return head; while(p!=NULL) { q=p->next; p->next=head; head=p; p=q; } return head; } int main() { node *root; int a[5]={2,3,4,5,6}; root =create(a,5); node *temp1=root; for(int i=0;i<5;++i) { cout<<temp1->data<<endl; temp1=temp1->next; } node *reverseHead=reverse(root); cout<<"After reverse:"<<endl; node *temp2=reverseHead; for(int i=0;i<5;++i) { cout<<temp2->data<<endl; temp2=temp2->next; } }注意:新建链表的时候,切记一定要把节点node的所有元素都指明,例如node 有data、next 不要只初始化data而忘记p->next=NULL;

如果忘记p->next=NULL;则在以后while(p)时候会停不下来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值