|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 涛4091 于 2023-2-23 10:59 编辑
问题:带头结点的单链表逆置
- //带头单链表的逆置
- #include<stdio.h>
- #include<stdlib.h>
- typedef int DataType;
- typedef struct Node{
- DataType data;
- struct Node *next;
- }Node;
- void RearInsert(Node *first){
- int number,value;
- printf("请输入要插入的个数:");
- scanf("%d",&number);
- Node *p=first; //工作指针
- while(number){
- Node *s = (Node *)malloc(sizeof(Node));
- printf("请输入要插入的数值:");
- scanf("%d",&value);
- s->data = value;
- s->next = NULL;
- p->next = s;
- p=s;
- number = number-1;
- }
- }
- void Reverse(Node *first){
- printf("开始逆置\n");
- Node *p=first->next;
- Node *p_rear;
- Node *L = first;
- while(p != NULL){
- p_rear = p->next;
- p->next = L->next;
- // printf("p->data = %d\n",p->data);
- L->next = p;
- printf("L->data = %d\n",L->next->data);
- p = p_rear;
-
- }
-
- }
- void Printf(Node *first){
- Node *p = first;
- while(p->next){
- printf("单链表数据为:%d\n",p->next->data);
- p= p->next;
- }
- }
- int main(){
- Node *first = (Node *)malloc(sizeof(Node));
- Node result;
- first->next = NULL;
- first->data = NULL;
- RearInsert(first);
- printf("打印单链表:\n");
- Printf(first);
- Reverse(first);
- printf("逆置后的单链表:\n");
- Printf(first);
- return 0;
- }
复制代码
用了头插法。运行后无限循环
本帖最后由 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>
复制代码
|
|