剑指offer(十二)之反转链表
来源:互联网 发布:优化服务指导意见 编辑:程序博客网 时间:2024/06/13 03:07
题目描述
// 2 -> 1 -> 0 -> 3 -> 4 oldHead指向0, newHead指向2,toBeReversed指向3
输入一个链表,反转链表后,输出链表的所有元素。
思路分析:
用栈来存储链表的节点,栈是先进后出,再将栈弹出到一个新链表中即可。
代码:
import java.util.*;
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null || head.next==null){
return head;
}
Stack stack = new Stack();
ListNode in = head;
ListNode out = head;
while(in!=null){
stack.push(in.val);
in = in.next;
}
while(out!=null){
out.val = (int)stack.pop();
out = out.next;
}
return head;
}
}
或者
每次循环的情况写出来,假设初始链表是 0 -> 1 -> 2 -> 3 -> 4
// 0 -> 1 -> 2 -> 3 -> 4 oldHead指向0, newHead指向0,toBeReversed指向1
// 1 -> 0 -> 2 -> 3 -> 4 oldHead指向0, newHead指向1,toBeReversed指向2// 0 -> 1 -> 2 -> 3 -> 4 oldHead指向0, newHead指向0,toBeReversed指向1
// 2 -> 1 -> 0 -> 3 -> 4 oldHead指向0, newHead指向2,toBeReversed指向3
// 3 -> 2 -> 1 -> 0 -> 4 oldHead指向0, newHead指向3,toBeReversed指向4
// 4 -> 3 -> 2 -> 1 -> 0 oldHead指向0, newHead指向4,toBeReversed指向null
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode oldHead = head;
ListNode newHead = head;
ListNode toBeReversed = head.next;
do {
oldHead.next = toBeReversed.next;
toBeReversed.next = newHead;
newHead = toBeReversed;
toBeReversed = oldHead.next;
} while (toBeReversed!=null);
return newHead;
}
// 4 -> 3 -> 2 -> 1 -> 0 oldHead指向0, newHead指向4,toBeReversed指向null
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode oldHead = head;
ListNode newHead = head;
ListNode toBeReversed = head.next;
do {
oldHead.next = toBeReversed.next;
toBeReversed.next = newHead;
newHead = toBeReversed;
toBeReversed = oldHead.next;
} while (toBeReversed!=null);
return newHead;
}
0 0
- 剑指offer(十二)之反转链表
- 剑指Offer之反转链表
- 剑指Offer之 - 反转链表
- 剑指offer之反转链表
- 【剑指offer】之反转链表
- 剑指offer之反转链表
- 剑指offer 之 反转链表
- 剑指offer之十四---反转链表
- 剑指offer:反转链表
- 剑指offer--反转链表
- 剑指offer--反转链表
- 剑指Offer-反转链表
- 《剑指offer》反转链表
- 剑指 offer:反转链表
- 剑指offer-反转链表
- 剑指offer 反转链表
- 剑指offer-反转链表
- 剑指offer:反转链表
- SQL中Group By的使用
- angular-drag - 基于Angularjs的拖拽指令
- c#面试2(选择题)
- Android创建应用快捷方式(ShortCut)的有效方式
- 把32位的unsigned int按位倒过来(转)
- 剑指offer(十二)之反转链表
- 快捷酒店火碱勾兑洗涤剂洗出白床单 7天速8等上榜
- django 缓存优化 概述
- 【代码笔记】iOS-看图听声音
- 单例----设计模式
- 安卓如何捕获奔溃异常日志及上传到服务端
- BufferedReader的用法
- 深度分析内存泄漏原因,使用MAT工具检测内存泄露和性能
- diy数据库(四)--锁和队列