单链表反转
来源:互联网 发布:哈飞里程表 算法 编辑:程序博客网 时间:2024/05/16 08:24
思路
(1)直接遍历链表,入栈,然后出栈重新构造链表
(2)递归,例如5交给4,4交给3…
代码
import java.util.*;//链表class Node { int val; Node next; public Node(int val) { this.val = val; }}public class Main { //递归处理后返回的头结点 static Node ans2; //标记头结点 static Node marknode; //1.使用栈 public static Node reverseOfList(Node pnode) { Stack<Node> stack = new Stack<Node>(); Node temp = pnode; while(temp != null) { stack.push(temp); temp = temp.next; } Node ans = stack.pop(); temp = ans; while(!stack.empty()) { temp.next = stack.pop(); temp = temp.next; } temp.next = null; return ans; } //2.使用递归 public static Node reverseOfList2(Node pnode) { //标记头结点,对其的next赋值null marknode = pnode; dfs(pnode); return ans2; } public static Node dfs(Node pnode) { Node rear; if(pnode.next == null) { ans2 = pnode; rear = pnode; return rear; } rear = dfs(pnode.next); rear.next = pnode; //如果此结点是原头结点,其next指向空 if(pnode == marknode)pnode.next = null; return rear.next; } //测试 public static void main(String[] args) { Node p = new Node(1); p.next = new Node(2); p.next.next = new Node(3); p.next.next.next = new Node(4); p.next.next.next.next = new Node(5); Node ans = reverseOfList2(p); Node temp = ans; while(temp != null) { System.out.print(temp.val+" "); temp = temp.next; } System.out.println(); }}
0 0
- 单链表反转
- 单链表反转
- 单链表反转
- 反转单链表
- 单链表反转
- 反转单链表
- 单链表-反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 反转单链表
- 单链表反转
- CSS初次实战之梅兰整站自搭建流程
- 关于WEB项目自动导包的问题
- 高德地图 步行路线规划 Walking
- VMware配置虚拟网络
- c++实验3
- 单链表反转
- 421. Maximum XOR of Two Numbers in an Array
- HDU1429 胜利大逃亡(续) 【状压搜索BFS】
- Android Activity生命周期详解
- 嘿,程序猿,你该学点经济学了!
- Linux(CentOS)下,下载安装Nginx并配置
- 173. Binary Search Tree Iterator
- 如何使用 Node.js 开发交互式命令行应用程序
- ZOJ3696-Alien's Organ(泊松分布)