题目:新建一个链表,然后反转一下
#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)时候会停不下来