zoukankan      html  css  js  c++  java
  • 剑指offer 06 从尾到头打印链表

     方法一:运用栈:

    根据栈的特点是后进先出,即最后压入栈的元素最先得到,考虑到栈的这一特点,使用栈将链表的元素顺序倒置。从链表头节点开始,依次将每个节点压入栈内,然后依次弹出栈内的元素并存储到数组中。

    • 创建一个栈,用于存储链表的节点
    • 创建一个指针,初始时指向链表的头节点
    • 当指针指向的元素非空时,重复下列操作:
      • 将指针指向的节点压入栈内
      • 将指针移到当前节点的下一个节点
    • 获得栈的大小 size,创建一个数组 print,其大小为 size
    • 创建下标并初始化 index = 0
    • 重复 size 次下列操作:
      • 从栈内弹出一个节点,将该节点的值存到 print[index]
      • 将 index 的值加 1

    方法二。链表反转


    2
    * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 9 10 /** 11 * Note: The returned array must be malloced, assume caller calls free(). 12 */ 13 int* reversePrint(struct ListNode* head, int* returnSize){ 14 if(head==NULL) 15 { 16 *returnSize=0; 17 return 0; 18 } 19 int n=0,i; 20 struct ListNode *p=head; //创建一个指针初始时指向链表的头节点 21 while(p!=NULL) 22 { 23 n++; 24 p=p->next; 25 } 26 int *a=(int*)calloc(n,sizeof(int)); //创建一个数组,大小为n 27 for(i=0;i<n;i++) 28 { 29 a[n-1-i]=head->val; 30 head=head->next; 31 } 32 *returnSize=n; 33 return a; 34 }

    方法二:递归

    关于递归的方法是看见一位大佬写的,觉得很厉害。给大家分享一下。

     1 int* reversePrint(struct ListNode* head, int* returnSize){
     2     if(head == NULL){
     3         *returnSize = 0;
     4         return malloc(sizeof(int) * 10000);
     5     }
     6     int *ans = reversePrint(head->next, returnSize);
     7     ans[(*returnSize)++] = head->val;
     8     return ans;
     9 }
    10 
    11 作者:ning-junzhi
    12 链接:https://leetcode-cn.com/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/solution/c-jian-dan-yi-dong-de-jie-fa-by-ning-junzhi/
    13 来源:力扣(LeetCode)
    14 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    vc++ 最小化到托盘的详细实现
    WS_CLIPCHILDREN和WS_CLIPSIBLINGS的理解(转载)
    windows 进程间通讯方法
    C++中各种数据量类型转换
    WTL 自绘 进度条Progressbar
    C++ 读取XML文件(tinyXML库的应用)
    WTL 自定义 Button类-自绘
    设计模式课程 设计模式精讲 27-3 状态模式源码解析
    设计模式课程 设计模式精讲 27-2 状态模式coding
    设计模式课程 设计模式精讲 26-3 访问者模式源码解析
  • 原文地址:https://www.cnblogs.com/sbb-first-blog/p/13276483.html
Copyright © 2011-2022 走看看