算法与数据结构面试题(10)-颠倒链表
来源:互联网 发布:sql server 安装版 编辑:程序博客网 时间:2024/05/29 10:59
题目
用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。
解题思路
1.先用递归颠倒
2.尝试不用递归颠倒
代码
1.递归式
public class Problem8 {public LinkedListNode invert(LinkedListNode node) {if (node == null) {throw new NullPointerException();}LinkedListNode endNode = null;LinkedListNode nextNode = node.getNextNode();if (nextNode != null) {node.setNextNode(null);endNode = invert(nextNode);nextNode.setNextNode(node);} else {endNode = node;}return endNode;}public LinkedListNode parseLinkedList(int[] data) {LinkedListNode lastNode = null;for (int i = data.length - 1; i >= 0; i--) {LinkedListNode currentNode = new LinkedListNode();currentNode.setValue(data[i]);currentNode.setNextNode(lastNode);lastNode = currentNode;}return lastNode;}public static void main(String[] args) {int[] data = { 1, 2, 3, 4, 5, 6, 7 };Problem8 problem8 = new Problem8();LinkedListNode rootNode = problem8.parseLinkedList(data);LinkedListNode endNode = problem8.invert(rootNode);problem8.printlnLinkedArray(endNode);System.out.println("Done");}public void printlnLinkedArray(LinkedListNode node){if(node == null) return;System.out.println("" + node.getValue());printlnLinkedArray(node.getNextNode());}}
输出
7654321Done
2.非递归式
public class Problem8_2 {public LinkedListNode invert(LinkedListNode node, int length) {LinkedListNode[] nodes = new LinkedListNode[length];// 先断链for (int i = 0; i < length; i++) {if (node != null) {nodes[i] = node;node = node.getNextNode();}}// 再指针反向for (int i = length - 1; i >= 0; i--) {if (i == 0) {nodes[i].setNextNode(null);} else {nodes[i].setNextNode(nodes[i - 1]);}}return nodes[length - 1];}public LinkedListNode parseLinkedList(int[] data) {LinkedListNode lastNode = null;for (int i = data.length - 1; i >= 0; i--) {LinkedListNode currentNode = new LinkedListNode();currentNode.setValue(data[i]);currentNode.setNextNode(lastNode);lastNode = currentNode;}return lastNode;}public static void main(String[] args) {int[] data = { 1, 2, 3, 4, 5, 6, 7 };Problem8_2 problem8 = new Problem8_2();LinkedListNode rootNode = problem8.parseLinkedList(data);LinkedListNode endNode = problem8.invert(rootNode, data.length);problem8.printlnLinkedArray(endNode);System.out.println("Done");}public void printlnLinkedArray(LinkedListNode node) {if (node == null)return;System.out.println("" + node.getValue());printlnLinkedArray(node.getNextNode());}}
0 0
- 算法与数据结构面试题(10)-颠倒链表
- 算法与数据结构面试题(9)-颠倒字符串
- 数据结构与算法面试题
- 算法与数据结构面试题
- 数据结构与算法面试题
- 数据结构与算法 面试题
- 算法与数据结构面试题(6)-腾讯面试题
- 数据结构与算法笔试面试题
- 数据结构与算法面试题80道
- 数据结构与算法面试题80道
- 数据结构与算法面试题100道
- 数据结构与算法面试题80道
- 数据结构与算法面试题80道
- 数据结构与算法面试题80道
- 数据结构与算法面试题80道
- 数据结构与算法面试题80道
- 数据结构与算法面试题80道
- 数据结构与算法面试题(待定)
- Sql Server 里的向上取整、向下取整、四舍五入取整的实例
- git-svn使用以及问题解决
- android:layout_gravity 和 android:gravity 的区别
- Windows Phone 7 Quick Tip: How to use Bing Maps in XNA games
- dwr自动生成的js文件
- 算法与数据结构面试题(10)-颠倒链表
- 16、IIC通信协议
- viewpager实现静态导航
- win32 带登录界面的最简单版本计算器
- 具体怎么使用视频播放屏幕的感重力切换横竖屏
- 创建maven骨架
- zencart根目录主要目录介绍
- Android requestLayout和invalidate源码分析
- win8.1 oracle 11g R2 安装手顺