一、题目描述
设L为带头节点的单链表,编写算法实现从头到尾反向输出每个节点的值。
二、题目分析
使用头插法来实现单链表的逆置。时间复杂度为O(n),空间复杂度为O(n)。
也可以用另一个链表或数组来存储元素然后逆置,这是空间换时间的做法,空间复杂度和时间复杂度都是O(n).
三、代码
#include<stdio.h> #include<stdlib.h> //对单链表的定义 typedef struct LinkNode{ int data; LinkNode *next; }LinkNode,*LinkList; //对单链表的初始化 void InitLinkList(LinkList &L){ L =(LinkList)malloc(sizeof(LinkList)); L->next = NULL; } //输出链表中的数据 void PrintLinkList(LinkList L){ LinkNode *p = L->next; while(p != NULL){ printf("%d ",p->data); p = p->next; } printf("\n"); } //实现链表的逆置 bool RevLinkList(LinkList &L){ LinkNode *p = L->next; LinkNode *s; if(p == NULL) return false; while(p->next!=NULL){ s = p->next; p->next = s->next; s->next = L->next; L->next