设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
5条回答 默认 最新
- 技术专家团-小桥流水 2022-09-22 12:40关注
需要根据你的链表是否有头节点(哨兵节点)来处理。
有头节点的链表逆序#include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct link_node { datatype info; struct link_node* next; }node,*linklist; linklist createList() { datatype x; linklist L; char ch; L = (linklist)malloc(sizeof(node)); if (L == NULL) { printf("error"); return 0; } linklist n,p; p = L; printf("请输入整数系列:\n"); //输入系列并以回车结束 while(1) { scanf_s("%d",&x,1); n = (linklist)malloc(sizeof(node)); n->info = x; n->next = NULL; p->next = n; p = n; if( (ch=getchar()) == '\n') break; } return L; } void print(linklist head) { linklist p; p = head->next; while(p) { printf("%d ",p->info); p = p->next; } printf("\n"); } //翻转 linklist reverse(linklist head) { linklist p,t,k; p = head->next; t = p->next; p->next = NULL; while(t) { k = t->next; head->next = t; t->next = p; p = t; t = k; } return head; } //释放内存 void release(linklist head) { linklist p; while(head) { p = head->next; free(head); head = p; } } int main() { linklist head = createList(); print(head); head = reverse(head); printf("逆序后:"); print(head); release(head); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥15 cmd cl 0x000007b
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染