单链表的就地置换

来源:互联网 发布:淘宝客步骤 编辑:程序博客网 时间:2024/05/22 13:10
假设struct LINK { int value; struct LINK * next;};struct LINK a, b, c, d;a->next = &b;b->next = &c;c->next = &d;d->next = 0;逆置后:b->next = &a;c->next = &b;d->next = &c;a->next = 0;
</pre><pre name="code" class="cpp">
#include <iostream>using namespace std;typedef int elemtype;typedef struct LNode{elemtype data;struct LNode *next;}LNode,*LinkList;void InitList_L(LinkList &L)//构造一个空的单链表,即初始化单链表 {L=new LNode;L->next=NULL;}void CreateList_L(LinkList &L,int n)//建立链表 {   LNode *r,*p;    int i; r=L;for(i=0;i<n;i++){p=new LNode;cin>>p->data;p->next=NULL;r->next=p;r=p;}} void ReverseList_L(LinkList &L)//链表就地倒置{LNode *p,*q;               //就地逆置,就是在操作中,遇到a->next = &b;                         //的情况,那么改写为b->next = &a;p=L->next;L->next=NULL;while(p!=NULL){q=p->next;p->next=L->next;L->next=p;p=q;}}void PrintList_L(LinkList L)//显示链表{LNode *p;p=L->next;cout<<"倒置后的单链表为:\n";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;}int main(){LinkList la;//LNode *la;InitList_L(la);cout<<"请输入链表的元素个数:";int n;cin>>n;CreateList_L(la,n);ReverseList_L(la);PrintList_L(la);return 0; }  

1 0