链表的逆转
描述
利用单链表表示一个整数序列,通过一趟遍历,将单链表中所有结点的链接方向逆转。要求空间复杂度为O(1)。
输入
多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。
输出
对于每组数据分别输出一行,逆序输出链表中的元素,元素之间用空格分隔。
输入样例 1
5 1 2 3 4 5 6 3 1 2 5 4 6 0
输出样例 1
5 4 3 2 1 6 4 5 2 1 3
核心思路:::离地倒转
https://blog.csdn.net/denyz/article/details/17680651
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #define MAXSIZE 1000 #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef struct LNode{ int num; struct LNode *next; }LNode,* LinkList; void Inist_List(LinkList& L){ L=new LNode; L->next=NULL; } void Zuhe(LinkList& L1){ LinkList H1=L1; int m,n; while(1){ scanf("%d",&m); if(m==0) break; for(int i=0;i<m;i++){ LinkList p= new LNode; scanf("%d",&p->num); p->next=NULL; L1->next=p; L1=p; } LinkList p=new LNode; p->next=NULL; L1->next=p; L1=p; L1=H1; int i; LinkList old=L1->next,now=L1->next->next,tag; old->next=NULL; while(now){ tag=now->next; now->next=old; L1->next=old; old=now; now=tag; } LinkList b; b=L1; while(b->next->next) { b=b->next; printf("%d ",b->num); } printf("%d\n",b->next->num); } } int main(){ LinkList L1; Inist_List(L1); Zuhe(L1); return 0; }

浙公网安备 33010602011771号