使用C的链表反向输出

反向输出链表,在没有学习堆栈的情况下首先想到的是将链表数据储存在数组中,然后逆序输出,但是觉得如果数据量比较大的话,既费时又占内存。想将链表逆序链接,如何操作呢?递归也可以实现最后的数据先输出,如果学习了栈的话,应该知道是先进后出的,也可以实现。

-----------------------------------

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);
}

其实递归的本质也是利用了栈。

三、使用栈

(待补充)。

猜你喜欢

转载自blog.csdn.net/weixin_44165923/article/details/86515066