您的位置:首页 > 其它

将单链表H逆置

2015-11-07 21:14 411 查看
逆置:是指节点间的关系相反,即前驱变后继而后继变前驱。

算法思路:

依次从原链表中取出每个节点,每次都把该节点作为第一个节点插入另一个新链表中。#include<iostream>
#include<stdlib.h>
#include<stdio.h>

using namespace std;

struct node{
int data ;
struct node * next ;
} ;

//建立单链表,返回头结点
struct node * CreateLinkList(){
char ch ;
int x ;
struct node * head ;
struct node * r , * P ;
head = (struct node *)malloc(sizeof(struct node)) ;
head->next = NULL ;
r = head ;
ch =getchar( ) ;
while(ch != '*'){
// cout<<"ch = " << ch<< endl;
scanf("%d" , & x) ;
// cout<<"x = " << x << endl;
P = (struct node *) malloc(sizeof(struct node)) ;
P->data = x ;
P->next = NULL ;
r->next = P ;
r = r-> next ;
ch = getchar( ) ;
}
return head ;
}

//将单链表head逆置,并返回逆置后的链表
struct node * reverseLinkList(struct node * head ){
struct node *f , * b , *r;
// b = (struct node *)malloc(sizeof(struct node));
f = head->next;
b->next = NULL ;
head->next = NULL ;
while(f != NULL){
r = f ; //取节点
// cout<<"f->data = "<< f->data << endl;
// cout<<"f->next = " << f->next << endl;
f = f->next ;
r->next = b->next ; //插入节点
b->next = r ;
}
return b ;
}
int main(){

cout<< "建立单链表(请输入:[空格]25 45 18 76 29*)"<< endl;
struct node * rr =CreateLinkList();
PutOut(rr) ;
struct node * qq ;
cout<<"输出逆置的单链表"<< endl;
qq = reverseLinkList(rr) ;
PutOut(qq) ;
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表逆置