本帖最后由 jackz007 于 2022-11-22 01:14 编辑 //带头单链表的逆置
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct Node {
DataType data ;
struct Node * next ;
} Node ;
void RearInsert(Node ** first)
{
Node * p , * q ;
int number , value ;
printf("请输入要插入的个数:") ;
scanf("%d", & number) ;
for(q = * first ; q && q -> next ; q = q -> next) ;
for(int i = 0 ; i < number ; i ++) {
p = (Node *) malloc(sizeof(Node)) ;
printf("请输入要插入的数值:") ;
scanf("%d", & value) ;
p -> data = value ;
p -> next = NULL ;
if(q) q -> next = p ;
else * first = p ;
q = p ;
}
}
void Reverse(Node ** first)
{
printf("开始逆置\n") ;
Node * p , * q , * next ;
for(p = * first , q = NULL ; p ; ) {
next = p -> next ;
p -> next = q ;
q = p ;
p = next ;
}
* first = q ;
}
void Printf(Node * first)
{
Node * p = first ;
while(p) {
printf("单链表数据为:%d\n" , p -> data) ;
p = p->next ;
}
}
int main()
{
Node * first = NULL ; // 头指针赋初值为 NULL 非常重要!!!
RearInsert(& first) ;
printf("打印单链表:\n") ;
Printf(first) ;
Reverse(& first) ;
printf("逆置后的单链表:\n");
Printf(first) ;
return 0 ;
}
编译运行实况:D:\[00.Exerciese.2022]\C>g++ -o x x.c
D:\[00.Exerciese.2022]\C>x
请输入要插入的个数:5
请输入要插入的数值:1
请输入要插入的数值:2
请输入要插入的数值:3
请输入要插入的数值:4
请输入要插入的数值:5
打印单链表:
单链表数据为:1
单链表数据为:2
单链表数据为:3
单链表数据为:4
单链表数据为:5
开始逆置
逆置后的单链表:
单链表数据为:5
单链表数据为:4
单链表数据为:3
单链表数据为:2
单链表数据为:1
D:\[00.Exerciese.2022]\C>
|