練習(xí)2.5
//試編寫算法將帶頭結(jié)點(diǎn)的單鏈表就地逆置
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
typedef struct Lnode{
????int data;
????struct Lnode *next;
}Lnode,*LinkList;
//初始化帶頭節(jié)點(diǎn)的單鏈表
void init_LinkList(LinkList &L){
????int x;
????L = (LinkList)malloc(sizeof(Lnode));
????Lnode *r = L,*p;
????cout<<"請輸入數(shù)據(jù)(-1退出):";
????cin>>x;
????while(x != -1){
????????p = (Lnode*)malloc(sizeof(Lnode));
????????p->data = x;
????????p->next = NULL;
????????r->next = p;
????????cout<<p->data<<" "<<p<<" "<<p->next<<endl;
????????r = p;
????????cout<<"請輸入數(shù)據(jù)(-1退出):";
????????cin>>x;
? ? ? ? }
}
//逆置單鏈表,采用頭插法
void reverse_LinkList(LinkList &L){
????Lnode *r,*p;
//p指向表頭下一個,即要插入位置 ,r指向原序表
????r = L->next;
????L->next = NULL;
????while(r != NULL){
????????p = r;
????????r = r->next;
????????p->next = L->next;
????????L->next = p;
????}
}
int main(){
????LinkList L;
? ? ?init_LinkList(L);
????Lnode *p;
????p = L->next;
????while(p!= NULL){
????????cout<<p->data<<" ";
????????p = p->next;
????}
????cout<<endl;
?????p = L;
????reverse_LinkList(p);
????p = L->next;
????while(p!= NULL){
????????cout<<p->data<<" ";
????????p = p->next;
????}
}