单链表逆序生成及逆置的完整实现
- 本例中单链表数据类型定义成int型,可更改
头文件1(1.h)
宏定义及Status类型定义
头文件2(2.h)
单链表基本操作函数与逆置函数
include"1.h"
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList init_L(void){
LinkList p=(LinkList)malloc(sizeof(LNode));
if(NULL==p)
exit(0);
p->next=NULL;
return p;
}
void creat_L(LinkList &l,int n){
int i;
l=(LinkList)malloc(sizeof(LNode));
l->next=NULL;
for(i=n;i>0;--i){
LinkList p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
p->next=l->next;
l->next=p;
}
}
Status reverse(LinkList &L){
LinkList p=L->next;
if(p==NULL||p->next==NULL)
return OK;
while(p->next!=NULL){
LinkList q=p->next;
p->next=q->next;
q->next=L->next;
L->next=q;
}
return OK;
}
主函数
逆序建立单链表,随后输出;逆置单链表,再输出
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "2.h"
using namespace std;
int main() {
int n,i;
LinkList p=init_L(),q;
printf("请输入单链表个数");
cin >> n;
creat_L(p,n);
q=p;
for(i=0;i<n;i++) {
q=q->next;
printf("[%d]",q->data) ;
if(q->next==NULL){
break;
}
}
printf("\n");
reverse(p);
for(i=0;i<n;i++) {
p=p->next;
printf("[%d]",p->data) ;
if(p->next==NULL){
break;
}
}
}