剑指Offer_编程题_从尾到头打印链表

题目描述

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

创建链表相关,头插法和尾插法

关于头插法,可以next可以理解成前一个节点地址,插入顺序:

1、头节点传入,开始创建A数据,头节点的next指向A数据的内存地址,A节点的next替换成头节点的

2、头节点再传入,创建B数据,头节点的next又换成了指向B的内存地址,B节点的next替换头节点的A;

总结一下:插入时候,一直在头节点的上面插入数据,原来的数据被“顶”上去了;

     头插法遍历的时候,头节点开始,一个一个往上遍历。这样最后插入的就作为第一个输出出来了;

     尾插法编练插入,比较好理解,就是一直在“尾巴”追加,遍历时候从头开始,第一个插入的就第一个输出出来; 

public class Test {

    static Node headNode;

    class Node {        private Node next;//指针        private int data;//数据域    }

    //尾插法创建单链表  队列形式先进先出    public void back(Node node, int data) {        if (data < 10) {            Node next = new Node();            next.data = data;            next.next = null;            node.next = next;            back(next, ++data);        }    }

    //头插法创建单链表  栈形式先进后出    public void head(Node node, int data) {

        if (data < 10) {            Node next = new Node();            next.next = node.next;

            next.data = data;            node.next = next;            System.out.println("递归参数:" + node.data);            head(node, ++data);        }    }

    public static void main(String[] args) {        Test test = new Test();        headNode = test.new Node();//头指针//        new Test().back(headNode, 0);//前插法        new Test().head(headNode, 0);//后插法        System.out.println("创建后的链表是:");//0 1 2 3 4 5 6 7 8 9 10        while (headNode.next != null) {            headNode = headNode.next;            System.out.print(headNode.data + " ");        }    }

}

//————————————————//版权声明:本文为CSDN博主「另一个绝影」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。//原文链接:https://blog.csdn.net/weixin_37817685/article/details/83305972

原文地址:https://www.cnblogs.com/liran123/p/12641478.html

时间: 2024-08-29 18:57:27

剑指Offer_编程题_从尾到头打印链表的相关文章

【剑指offer】Q5:从尾到头打印链表

可以练习下链表的逆置. def PrintListReversingly(head): if head == None: return if head: PrintListReversingly(head.next) print head.val def reverse(head): if head == None or head.next == None: return head psuhead = ListNode(-1) while head: nexthead = head.next h

剑指Offers 题目1511:从尾到头打印链表

题目1511:从尾到头打印链表 题解报告:方法一.链表创建,头插法,方法二.运用栈,注意栈可能溢出~! #include <iostream> #include <stack> #include <cstdio> using namespace std; // stack int main() { int num; stack<int> List; while(scanf("%d", &num) && num !=

剑指offer系列源码-从尾到头打印链表

ob地址 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出: 5 4 3 2 1 #include<iostream> #include<stdio.h&g

剑指offer(3)从尾到头打印链表

题目描述: 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题代码: /*function ListNode(x){ this.val = x; this.next = null; }*/ function printListFromTailToHead(head) { // write code here var arr = []; if(head == null){ return arr; } while(head != null){ arr.push(head.val)

【剑指offer】替换空格从尾到头打印链表

题目链接 [题目描述] 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. [解题思路] 将链表的元素压入栈中(因为栈是先进后出的),然后再把栈中的元素放入vector即实现了倒序. [代码] 1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * ListNode(int x) : 6 * val(x), next(NULL) { 7 * } 8 * }; 9 */ 10 class Solu

剑指offer 面试题6.从尾到头打印链表

0.题目描述 输入一个链表的头结点,从尾到头反过来打印出每个节点的值. 1.解法 用栈即可. ? ? class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { stack<ListNode*> step; vector<int> ans; ListNode* p = head; while(p){ step.push(p); p = p -> next; } whi

刷题6 从尾到头打印链表

描述:  输入一个链表,从尾到头打印链表每个节点的值. 最初思路: 1 /** 2 * struct ListNode { 3 * int val; 4 * struct ListNode *next; 5 * ListNode(int x) : 6 * val(x), next(NULL) { 7 * } 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> printListFromTailToHead(ListNode* he

剑指Offer_编程题_25

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) {

剑指Offer_编程题_4

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x