题目描述

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

一 . 个人想法

这个题目搞了一段时间,因为解法好多,比如:是用递归法呢还是循环呢,要不要使用栈呢等等.. 所以,每一种想法都写一下吧,还有一点点的小细节什么的。

这个题目就不用解释了吧,举个例子:输入1→2→3→4→5,输出5→4→3→2→1。

二 . 解题方法

方法一:栈+循环

具体的思路:输入一个链表1(特点:先进先出) →  建一个栈(特点:先前后出)和一个链表2  →  把链表一的数据高进栈  →  把栈里的东西倒进链表2  →  结束!!(不明白看代码:注释很详细)

代码实现:

using System.Collections.Generic;
/*
public class ListNode
{
public int val;
public ListNode next;
public ListNode (int x)
{
val = x;
}
}*/
class Solution
{
// 返回从尾到头的列表值序列
//首先输入一个名为printListFromTailToHead的链表;List<int>为链表类型;ListNode listNode分别为指针和数据
public List<int> printListFromTailToHead(ListNode listNode)
{
// write code here
//定义一个名为stack的栈
Stack<int> stack = new Stack<int>();
//定义一个名为list的链表,即为最后输出的那个表
List<int> list=new List<int>();
//定义head指针
ListNode head=listNode;
//当输入的链表数据不为空时,执行进栈操作
while(head!=null)
{
stack.Push(head.val);
head=head.next;
}
//当栈的长度大于0时,出栈;出栈后的数据添加到名为list的链表
while(stack.Count>)
{
int item=stack.Pop();
list.Add(item);
}
return list;
}
}

方法二:链表+循环

具体的思路:使用两个链表,第一个正序输入,第二个倒着输入。

代码实现:

using System.Collections.Generic;
/*
public class ListNode
{
public int val;
public ListNode next;
public ListNode (int x)
{
val = x;
}
}*/
class Solution
{
// 返回从尾到头的列表值序列
public List<int> printListFromTailToHead(ListNode listNode)
{
//定义一个新链表
List<int> list = new List<int>();
//定义节点指向数据
ListNode node = listNode;
//输入的数据不为空的时候,就一直加
while (node != null)
{
list.Add(node.val);
node = node.next;
}
//定义第二个链表
List<int> re = new List<int>();
//从链表1的最后端倒序插入新链表
for (int i = list.Count - ; i > -; i--)
{
re.Add(list[i]);
}
//返回新链表
return re;
}
}

方法三:递归

        具体的思路:指针遍历,如果这个指针的下一位是空的,输出一个数;不为空就继续往下循环。还有一件事啊!就是,你只要用递归法,一定要搞好这个循环和终止条件!!不要弄成个死循环。

代码实现:

using System.Collections.Generic;
/*
public class ListNode
{
public int val;
public ListNode next;
public ListNode (int x)
{
val = x;
}
}*/
class Solution
{
// 返回从尾到头的列表值序列 public List<int> printListFromTailToHead(ListNode listNode)
{
// write code here
//定义一个新链表
List<int> list = new List<int>();
//数据域不空,执行,空了的话,执行返回list
if (listNode != null)
{
//下一个数据域还不空,递归!!
if (listNode.next != null)
{
//一开始我没用list=后面,直接写了后面的,老实说,我不是很懂为何加上,哎!!
list = printListFromTailToHead(listNode.next);
}
//如果下一个空了,就在这个链表上加上他!!
list.Add(listNode.val);
}
//返回链表
return list;
}
}

剑指Offer的学习笔记(C#篇)-- 从尾到头打印链表的更多相关文章

  1. 《剑指offer》— JavaScript(3)从尾到头打印链表

    从尾到头打印链表 题目描述 输入一个链表,从尾到头打印链表每个节点的值. 实现代码 /*function ListNode(x){ this.val = x; this.next = null; }* ...

  2. (剑指Offer)面试题5:从尾到头打印链表

    题目: 输入一个链表的头结点,从尾到头反过来打印每个结点的值. 链表结点定义: struct ListNode{ int value; ListNode* pNext; }; 思路: 1.改变链表结构 ...

  3. 剑指offer第二版面试题5:从尾到头打印链表(JAVA版)

    题目描述: 输入一个链表,从尾到头打印链表每个节点的值.返回新链表. import java.util.Stack; //定义链表结构 class ListNode { int value; List ...

  4. 剑指offer编程题Java实现——面试题5从头到尾打印链表

    题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...

  5. 剑指Offer的学习笔记(C#篇)-- 序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 一 . 理解题意 二叉树的序列化,是将一个结构化的东西变成扁平化的字符串,序列化二叉树或者是反序列化二叉树就是二叉树和扩展二叉树遍历序列之间的 ...

  6. 剑指Offer的学习笔记(C#篇)-- 反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...

  7. 剑指Offer的学习笔记(C#篇)-- 链表中倒数第K个点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 一 . 数据结构基础概念普及(线性表). 线性表可分为顺序表与链表,它们是堆栈.队列.树.图等数据结构的实现基础. 顺序表,线性表的顺序存储结构是 ...

  8. 剑指Offer的学习笔记(C#篇)-- 旋转数组的最小数字

    题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋 ...

  9. 剑指Offer的学习笔记(C#篇)-- 和为S的连续正数序列

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  10. 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将  num1[0], num2[0 ...

随机推荐

  1. Django的模型层(2)---多表操作

    多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对 ...

  2. 【转】BigInteger、BigDecimal详解

    参考 http://lavasoft.blog.51cto.com/62575/228705/ 从Java4到Java5,Java对BigInteger.BigDecimal两个类功能一直再做扩展与改 ...

  3. 如何浏览github上所有的公开的项目?

    github 上面项目多如牛毛,没有维护的.没有意义的或太过偏门的项目也是数不胜数,所以直接按照字母或者更新顺序浏览实在没什么意义. 有一个做法是去 github 搜 awesome list,比如通 ...

  4. <关于JSP技术>运行机制及语法概述(附对本次同济校内ACM选拔赛决赛的吐槽)

    (一)JSP运行的机制 JSP是一种建立在Servlet规范功能之上的动态网页技术,它们都是在通常的网页文件中嵌入脚本代码,用于产生动态内容,不过和ASP不同的是JSP文件中嵌入的是Java代码和JS ...

  5. 【字符串题目】poj 3096 Surprising Strings

    Surprising Strings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6193   Accepted: 403 ...

  6. poj 3268 Silver Cow Party (最短路算法的变换使用 【有向图的最短路应用】 )

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13611   Accepted: 6138 ...

  7. 动态IP下群晖搭建DDNS服务

    转载地址:https://www.zimrilink.com/share/dsm_aliddns_server.html 通过阿里云API(php)搭建出DDNS动态域名解析服务器;不同的是本文的方法 ...

  8. 【HDU2050】折线分割平面

    Position Solution 2×n^2-n+1 证明见分割问题 Code // This file is made by YJinpeng,created by XuYike's black ...

  9. cifs挂载远程文件出现 No such device or address错误

    1. 参考 https://www.raspberrypi.org/forums/viewtopic.php?t=82199 找了两天看到这个文章才解决了问题. 我是之前同事在windows上挂载成功 ...

  10. hdu-5813 Elegant Construction(贪心)

    题目链接: Elegant Construction Time Limit: 4000/2000 MS (Java/Others)     Memory Limit: 65536/65536 K (J ...