Q3--从尾到头打印链表
来源:互联网 发布:sopcast网络电视 apk 编辑:程序博客网 时间:2024/05/29 11:20
一、题目描述
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
二、解题思路
如果只是从尾到头打印链表不需要将链表反转,可以采用下面的方法1和方法2来实现。方法1是用递归的解法,方法2是用栈,方法3则是将链表反转。
三、代码实现
import java.util.ArrayList;import java.util.Stack;class ListNode{ int val; ListNode next = null; ListNode(int val){ this.val = val; }}public class Main { public static void main(String[] args){ //构造一个单向链表 ListNode head = new ListNode(8); ListNode p = head; for(int i = 0; i < 5; i++){ ListNode ln = new ListNode(i); p.next = ln; p = p.next; } //采用第一种方法返回反序后的列表 ArrayList<Integer> al = printListFromTailToHead(head); System.out.println(al); //采用第二种方法返回反序后的列表 ArrayList<Integer> al2 = printListFromTailToHead2(head); System.out.println(al2); //用三个指针来得到反序后的头指针,并依次输出链表各元素的值 ListNode newHead = printListFromTailToHead3(head); while(newHead != null){ System.out.print(newHead.val); newHead = newHead.next; } } //第一种方法:用栈来实现 public static ArrayList<Integer> printListFromTailToHead(ListNode head){ ArrayList<Integer> al = new ArrayList<Integer>(); Stack<Integer> sta = new Stack<Integer>(); while(head != null){ sta.add(head.val); head = head.next; } while(!sta.empty()) al.add(sta.pop()); return al; } public static ArrayList<Integer> printListFromTailToHead2(ListNode head){ ArrayList<Integer> al = new ArrayList<Integer>(); if(head != null){ if(head.next != null) al.addAll(printListFromTailToHead2(head.next)); al.add(head.val); } return al; } //用三个指针来实现链表的反序,返回的是头指针 public static ListNode printListFromTailToHead3(ListNode head){ if(head == null) return null; ListNode node1 = head; if(node1.next == null) return head; ListNode node2 = node1.next; node1.next = null; if(node2.next == null) { node2.next = node1; return node2; } ListNode node3 = node2.next; node2.next = node1; while(node3.next != null){ node1 = node2; node2 = node3; node3 = node3.next; node2.next = node1; } node3.next = node2; return node3; }}
0 0
- Q3--从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 【20】从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- 从尾到头打印链表
- Offer5 从尾到头打印链表
- 从尾到头打印链表
- 1、从尾到头打印链表
- java中Thread.join()
- 个人简历
- Windows 系统下设置Nodejs NPM全局路径
- PAT乙级.1020. 月饼 (25)
- BZOJ Preprefix sum
- Q3--从尾到头打印链表
- HDOJ 3667 Transportation 最小费用最大流+拆边+加点
- Vuejs——(9)组件——props数据传递
- android View知识点总结
- 在子线程更新UI
- android videoview函数解析
- 新西兰科学家能在3D生物打印骨骼
- 洛谷 P1198 最大数
- redis启动提示vm.overcommit_memory、somaxconn警告错误