指针L指向链表的哨兵节点,遍历链表,L改指向为所要求解链表的哨兵节点,遍历到当前元素时,将该元素插在哨兵节点和第一个真正节点之间,遍历结束时,于是
就得到了反向链表。
#include<iostream> using namespace std; typedef struct Node{ int data; struct Node *next; }LNode,*LinkList; LNode *Create_LinkList()//创建链表 { LinkList L; LNode *s,*r; int x; s=(LNode *)malloc(sizeof(LNode)); s->next=NULL; L=r=s; while(cin>>x,x) { s=(LNode *)malloc(sizeof(LNode)); s->data=x; s->next=NULL; if(L->next==NULL) { L->next=s; } else { r->next=s; } r=s; } return L; } LinkList reverse(LinkList L)//反转链表 { LNode *p,*q; p=L->next; L->next=NULL; while(p) { q=p; p=p->next; q->next=L->next; L->next=q; } return L; } int main() { LinkList H; H=Create_LinkList(); LNode *p; p=H->next; while(p) { cout<<p->data<<" "; p=p->next; } cout<<endl; LinkList S; S=reverse(H); LNode *q; q=S->next; while(q) { cout<<q->data<<" "; q=q->next; } cout<<endl; system("pause"); return 0; }