反转链表
来源:互联网 发布:中转国际机票 知乎 编辑:程序博客网 时间:2024/06/06 19:16
问题描述:输入一个链表,反转链表后,输出链表的所有元素。
import java.util.ArrayList;import java.util.Stack;class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution { //方法1:使用ArrayList作中介 public static ListNode ReverseList(ListNode head) { ArrayList<Integer> list = new ArrayList<Integer>(); ListNode temp = head; while(head != null){ list.add(head.val); head = head.next; } ListNode t = temp; //很关键一句 for (int i = list.size()-1; i >= 0; i--){ temp.val = list.get(i); temp = temp.next; } return t; } //方法2:使用栈结构作中介 public static ListNode ReverseList1(ListNode head) { Stack<Integer> stack = new Stack<Integer>(); ListNode temp = head; while(temp != null){ stack.push(temp.val); temp = temp.next; } ListNode t = head; //同样很关键一句 while (!stack.isEmpty()){ head.val = stack.pop(); head = head.next; } return t; }}
总结:两种方法都是使用另外的结构来作为中介,使用ArrayList存储后再从尾到头进行遍历,进而存储回链表中,或者使用Stack先进后出的原理,入栈再出栈存储回原来的链表中。其中应该注意到的两点即是遍历链表时,应保留头结点的引用。第二点则是代码中关键的那一句,因为漏了这一句,蛋疼了很久,原因在于之前直接将其链表返回,但是由于之前存储时,链表引用已经到尾了,所以直接提交导致测试用例测试时候直接从尾开始遍历,所以得到空的结果集,一直AC不了。所以使用t的作用也是保存头结点引用。
阅读全文
0 0
- 链表反转
- 反转链表
- 单向链表反转
- 链表反转:
- 链表的反转
- 链表反转
- 反转单向链表
- 链表反转
- 单向链表反转
- 单向链表反转
- 链表的反转
- 链表反转
- 反转链表
- 链表反转
- 链表反转
- 链表反转
- 链表反转
- 链表的反转
- 最全Pycharm教程(15)——Pycharm编辑器功能之自动生成格式
- HDU
- 利用chown改变属主和属组
- CRC-16/MODBUS
- 深入學習zip() ,能使用列表,元組,但不能使用字典
- 反转链表
- JAVA知识点梳理第一部分——常规知识
- iOS开发笔记--UITableViewCell的选中时的颜色及tableViewCell的selecte与deselecte
- 使用BitSet对1000万个Int整数进行排序
- Escape
- springmvc中文乱码
- mysql数据库
- Java Web书籍推荐
- 最全Pycharm教程(16)——Pycharm编辑器功能之代码自动生成