【6. 从尾到头打印链表】剑指offer-JAVA实现

拓朴蝉翼
• 阅读 1068

题目描述: 从尾到头反过来打印出每个结点的值。

思路1:头插法

代码:

public class Six {
    private Node first;
    public class Node{
        public int key;
        public Node next;
    }
    
    public Node createN(Node head) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()) {
        if(head==null) {
            head = new Node();
            head.key = in.nextInt() ;
            head.next = null;
        }else {
            Node newNode = new Node();
            newNode.key = in.nextInt();
            newNode.next = head;
            head=newNode;
              }
        }
        return head;
    }
    
    
    public void printNode(Node n) {
        if(n==null)
            System.out.println("空链表");
        while(n!=null) {
            System.out.println(n.key);
            n = n.next;
            
        }

    }
    
    
}

思路2: 后进先出想到栈, 把链表放进栈中/尾插+扔进栈中在拿出来

代码:

        Stack<Integer> s = new Stack<>();
        public class Node{
            public int key;
            public Node next;
        }
        
        public Node createN(Node head,Node tailer) {
            
            Scanner in = new Scanner(System.in);
            while(in.hasNext()) {
            if(head==null) {
                head = new Node();
                head.key = in.nextInt();
                head.next = null;
                tailer = head;
            }else {
                Node newNode = new Node();
                newNode.key = in.nextInt();
                tailer.next = newNode;
                tailer = newNode;
                
            }
        }
            return head;
            
    }
        
        public void printN(Node head) {
            Stack<Integer> s = new Stack<>();
            while(head!=null) {
                s.add(head.key);
                head=head.next;
            }
            Stack<Integer> o = new Stack<>();
            while(!s.isEmpty())
                o.add(s.pop());
            Iterator it = o.iterator();
            while(it.hasNext())
                System.out.println(it.next());
        }
         
}

复制代码

总结: 1.头插法:

       newNode.next = head;
       head=newNode;

2.尾插法

       tailer.next = newNode;
       tailer = newNode;

3.递归本质是栈结构

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
22 22
4年前
【数据结构之链表】详细图文教你花样玩链表
【系列文章推荐阅读】0.提要钩玄文章已经介绍了链式存储结构,介绍了链式存储结构的最基本(简单)实现——单向链表。单向链表,顾名思义,它是单向的。因为单链表的每个结点只有一个数据域和一个指针域,而该指针域只存储了下一个结点的地址,所以我们只能通过某结点找到其直接后继结点,却不能通过某节点找到其直接前驱结点。此外,由于单链表到尾结点(链表的最后一
Wesley13 Wesley13
3年前
java语言基础6
hashmap的数据结构,HashMap的数据结构是数组链表红黑树(红黑树sinceJDK1.8)。我们常把数组中的每一个节点称为一个桶。当向桶中添加一个键值对时,首先计算键值对中key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这种现象称为碰撞,这时按照尾插法(jdk1.7及以前为头插法)的方式添
Wesley13 Wesley13
3年前
275,环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。如果 pos 是 1,则在该链表中没有环。说明:不允许修改给定的链表。示例1:输入:head3,2,0,4,pos
Wesley13 Wesley13
3年前
15.链地址法
同样是为了解决哈希表中索引重复问题的算法,基本思路为将哈希表中维护的数组改成存储链表的数组,将数据存在链表中。也可以用数组但是数组的插入和删除的效率较低,故采用链表。实现:链表的实现:/链结点,相当于是车厢/publicclassNode{//数据域publi
Wesley13 Wesley13
3年前
mysql中时间比较的实现
MySql中时间比较的实现unix\_timestamp()unix\_timestamp函数可以接受一个参数,也可以不使用参数。它的返回值是一个无符号的整数。不使用参数,它返回自1970年1月1日0时0分0秒到现在所经过的秒数,如果使用参数,参数的类型为时间类型或者时间类型的字符串表示,则是从1970010100:00:0
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
OC之description
打印对象用%@,比如打印字符串对象:NSString\name@”haha”;NSLog(@”%@”,name);输出结果为:haha比如:Person\p\\Personalloc\init\;p.age20;p.name@”jack”;NSLog(@”%@”,p);会打印出对象
Stella981 Stella981
3年前
LeetCode 92. 反转链表 II(Reverse Linked List II)
题目描述反转从位置_m_到_n_的链表。请使用一趟扫描完成反转。说明:1≤ _m_ ≤ _n_ ≤链表长度。示例:输入:12345NULL,m2,n4输出:14325NULL解题思路本题类似于反转链表
深度学习 深度学习
1个月前
头插法实现的树结构:链表式多叉树实现指南
一、简介和特点头插法实现的树是一种使用子节点的多叉。本文实现的树类通过链表头插法高效管理子节点关系,适合需要频繁插入子节点的场景。‌主要特点‌:1.动态子节点管理:使用链表存储子节点1.高效插入:头插法实现O(1)的子节点插入1.泛型支持:模板类设计支持多
拓朴蝉翼
拓朴蝉翼
Lv1
路过了学校花店,荒野在海边。
文章
7
粉丝
0
获赞
0