两个链表的第一个公共节点(Java实现)
来源:互联网 发布:java中的divide 编辑:程序博客网 时间:2024/06/10 20:46
本题为剑指offer面试题37
牛客网测试地址:https://www.nowcoder.com/questionTerminal/6ab1d9a29e88450685099d45c9e31e46
[编程题]两个链表的第一个公共结点
- 热度指数:42895时间限制:1秒空间限制:32768K
- 算法知识视频讲解
输入两个链表,找出它们的第一个公共结点。
package go.jacob.day511;import java.util.Stack;/** * @author Administrator * 本题有两种思想 * 思想一:用堆栈:缺点是开辟了辅助空间n+m,时间复杂度是O(n+m) * 思想二:先分别获得链表长度,获得两个链表的长度差a,则下次遍历的时候在较长链表上先走a步 * * 基础:因为ListNode是单链表,所以第一个公共点以后的节点完全相同 */public class Demo2 {/* * 方法一:使用堆栈 缺点:开辟了n+m个辅助空间 */public ListNode FindFirstCommonNode_1(ListNode pHead1, ListNode pHead2) {if (pHead1 == null || pHead2 == null)return null;ListNode result = null;ListNode tmp = null;// 新建两个栈用来存储两个链表的所有节点。(链表尾在栈顶)Stack<ListNode> stack1 = new Stack<ListNode>();Stack<ListNode> stack2 = new Stack<ListNode>();// 节点入栈while (pHead1 != null) {stack1.push(pHead1);pHead1 = pHead1.next;}while (pHead2 != null) {stack2.push(pHead2);pHead2 = pHead2.next;}// 依次判断栈顶节点是否相同,第一个公共节点即为栈pop出的最后相同节点while (!stack1.isEmpty() && !stack2.isEmpty()) {tmp = stack1.pop();if (tmp == stack2.pop())result = tmp;elsebreak;}return result;}/* * 方法二:获取链表长度,再从相对位置开始遍历 比方法一好 */public ListNode FindFirstCommonNode_2(ListNode pHead1, ListNode pHead2) {if (pHead1 == null || pHead2 == null)return null;ListNode node1 = pHead1, node2 = pHead2;int length1 = 0, length2 = 0;// 遍历两个链表while (node1 != null) {length1 += 1;node1 = node1.next;}while (node2 != null) {length2 += 1;node2 = node2.next;}//对较长链表的头结点进行处理,先走k步if (length1 >= length2) {int k = length1 - length2;while (k != 0) {pHead1 = pHead1.next;k--;}} else {int k = length2 - length1;while (k != 0) {pHead2 = pHead2.next;k--;}}//遍历第一个相同的节点就是第一个公共节点while (pHead1 != pHead2) {pHead1 = pHead1.next;pHead2 = pHead2.next;}return pHead1;}class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}}
0 0
- 两个链表的第一个公共节点(Java实现)
- Java找出两个链表的第一个公共节点
- 剑指offer----两个链表的第一个公共节点----java实现
- (LeetCode)两个链表的第一个公共节点
- 两个链表的公共第一个公共节点
- 两个链表的第一个公共结点java实现
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 找到两个单向链表的第一个公共节点
- 两个单向链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 两个链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 寻找两个相交链表的第一个公共节点
- 两个链表的第一个公共节点
- 两个链表的第一个公共节点
- 找出两个链表的第一个公共节点
- iOS中使用RSA加解密
- Heap block at 0075E6C8 modified at 0075E736 past requested size of 66
- 查看端口占用和杀死进程
- 使用Glide加载gif图
- pig简介
- 两个链表的第一个公共节点(Java实现)
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/
- 热块争用的解决方法
- Visual Studio 2012设置Jquery/Javascript智能提示
- 处理后台数据和easyui数据不统一
- web测试到底在测试什么
- mybatis实战教程(mybatis in action),mybatis入门到精通
- Java基础day01-代码题
- 动态规划求字符串之间的编辑距离