Leetcode 剑指 Offer 06 从尾到头打印链表

39 篇文章 0 订阅
34 篇文章 0 订阅

这道题考察的是对链表定义的理解,需要设置一个链表来存储倒序的原始链表。实际上可以用栈来解决。

P.S.

  1. 编程的时候最好将head和reverseStake链表都列出来,值得注意的是,两者都代表着指针,当两者的所代表的地址相同时,改变其中一个地址中的数值会影响另一个。因此需要一些中间变量来暂时存储数值,比如insert和insert1.
  2. 数值为空是’NULL’.

程序的耗时内存和源代码如下
耗时和内存

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* reversePrint(struct ListNode* head, int* returnSize){

    struct  ListNode*    reverseStake;
    int     length  =   0;

    if  (head  ==  NULL)
    {
        length  =   0;
    }

    else    if  (head->next    ==  NULL)
    {
        length  =   1;
        reverseStake    =   head;
        reverseStake->val   =   head->val;
        reverseStake->next  =   NULL;
    }

    else    
    {
        int         insert;

        struct  ListNode*   insert1;
        
		//第一段
        reverseStake           =    head;
        insert1                =    head->next;
        reverseStake->next     =    NULL;        
        reverseStake->val      =    head->val;             

        length++;
        
		//第二段
        while   (insert1    !=   NULL)
        {
            insert                 =   insert1->val;   
            reverseStake           =   insert1;
            insert1                =   insert1->next;
            reverseStake->next     =   head;
            reverseStake->val      =   insert; 

            length++;
            
            head                   =   reverseStake;
        }

    }

    *returnSize =   length;
    int*    reverse;
    reverse =   (int*)malloc(sizeof(int)*length);
    int     i;
    
    for (i=0;   i<length;   i++)
    {
        reverse[i]  =   reverseStake->val;
        reverseStake    =   reverseStake->next;
    }

    return  reverse;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值