反向输出链表,在没有学习堆栈的情况下首先想到的是将链表数据储存在数组中,然后逆序输出,但是觉得如果数据量比较大的话,既费时又占内存。想将链表逆序链接,如何操作呢?递归也可以实现最后的数据先输出,如果学习了栈的话,应该知道是先进后出的,也可以实现。
-----------------------------------
typedef struct LinkNode
{
int data;
struct LinkNode * next;
}LNode,* LinkList;
----------------------------------------
一、链表反向链接
把前面的节点一个一个拆出来,在一个一个的链接上。
LinkList revlinklist(LinkList head)
{
LinkList currentNode, preNode, nextNode;
currentNode = head;
preNode = NULL;
nextNode = NULL;
if (head == NULL)
return NULL;
while (currentNode)
{
nextNode = currentNode->next;
currentNode->next = preNode;
preNode = currentNode;
currentNode = nextNode;
}
return preNode;
}
二、使用递归
void showLink(LinkList head)
{
LinkList current;
current = head->next;
if (head == NULL)
printf("NULL!\n");
if(current!=NULL)
showLink(current);
printf("%d ->", head->data);
}
其实递归的本质也是利用了栈。
三、使用栈
(待补充)。