设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。
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; }本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录