赞
踩
1.声明两个指针*q,*p,p指向头结点的next,q指向p的next,让头结点的next为空,链表逆置相当于建立一个新的链表,只是需要将所需的结点在另一个链表中得到。
2.让链表的头结点的next为空,是让它继续当新链表的头结点。
3.新链表的链接和逆序建链表类似,都是让结点直接插入到头结点的后边。
4.所需结点的得到,使用p和q在原来的链表中依次得到,p永远指向将要链接的结点,q指向p结点的下一个结点。
5.当链接上一个结点的时候,让p指向q,q指向它的next,直到q为空结点。
- //链表逆置
- #include <iostream>
- #include<stdlib.h>
- using namespace std;
- struct node
- {
- int x;
- struct node *next;
- };
- //顺序建表
- struct node *creatListShun(int lenth)
- {
- struct node *head,*t,*p;
- int i;
- head=(struct node *)malloc(sizeof(struct node));
- head->next=NULL;
- t=head;
- for(i=0; i<lenth; i++)
- {
- p=(struct node *)malloc(sizeof(struct node));
- p->x=i;
- p->next=NULL;
- t->next=p;
- t=p;
- }
- return head;
- }
- struct node *nizhi(struct node *head)
- {
- struct node *p,*q;
- p=head->next;
- head->next=NULL;
- q=p->next;
- while (p!=NULL)
- {
- p->next=head->next;
- head->next=p;
- p=q;
- if (q) q=q->next;
- }
- return head;
- }
- int main()
- {
- struct node *head,*t;
- head=creatListShun(10);//顺序建链表
- t=head->next;
- cout<<"顺序建链表 :";
- while(t!=NULL)
- {
- cout<<t->x<<" ";
- t=t->next;
- }
- cout<<endl;
- head=nizhi(head);//链表逆置
- t=head->next;
- cout<<"链表逆置 :";
- while(t!=NULL)
- {
- cout<<t->x<<" ";
- t=t->next;
- }
- cout<<endl;
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。