无环单链表判相交
来源:互联网 发布:windows手机系统 编辑:程序博客网 时间:2024/05/02 04:16
现在有两个无环单链表,若两个链表的长度分别为m和n,请设计一个时间复杂度为O(n + m),额外空间复杂度为O(1)的算法,判断这两个链表是否相交。
给定两个链表的头结点headA和headB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500
思路:先判断A和B的长度,A>B的话,就c =A - B,然后判断A 和B 的节点值是否想到直到最后一个,如果在比较的过程中有一个不相等就返回false
代码如下:
package lianbiao;public class danlianbiaoxiangjiao {public static void main(String[] args) { ListNode A1 =new ListNode(1); ListNode A2 =new ListNode(2); ListNode A3 =new ListNode(3); ListNode A4 =new ListNode(4); A1.next =A2; A2.next =A3; A3.next =A4; ListNode B1 =new ListNode(2); ListNode B2 =new ListNode(3); ListNode B3 =new ListNode(4); B1.next =B2; B2.next =B3; System.out.println(danlianbiaoxiangjiao.chkIntersect(A1, B1));}public static boolean chkIntersect(ListNode headA, ListNode headB) { ListNode A = headA; ListNode B = headB; int countA =0; int countB =0; while(A != null){ countA++; A = A.next; } while(B != null){ countB++; B = B.next; } boolean aa =false; int i = 0; if(countA > countB){ aa = true; i =countA - countB; }else{ i =countB -countA; } for(int j=0;j<i;j++){ if(aa){ headA = headA.next; }else{ headB = headB.next; } } while(headA !=null && headB != null){ if(headA.val != headB.val){ return false; } headA =headA.next; headB =headB.next; } return true; }static class ListNode{int val = 0;ListNode next = null;ListNode(int val){this.val = val;}}}
0 0
- 无环单链表判相交
- 无环单链表判相交练习
- 链表18:无环单链表判相交
- 复杂链表的复制、链表判环、无环单链表判相交
- 矩形相交
- 【叉乘判相交】
- 相交线
- 线段相交
- 线段相交
- 线段相交
- 线段相交
- 规范相交
- 判断相交
- 线段相交
- 带环相交
- 线段相交
- 有环单链表相交
- 单链表相交
- Oracle 左连接、右连接、全外连接、(+)号作用
- iOS AFN的二次封装
- 数组中重复的数字
- Node binary not found 及 Appium for Mac 环境准备篇
- el表达式简介
- 无环单链表判相交
- Golang基本数据类型,常量,标识符
- jsp测试信息
- AIDL学习笔记(三)----客户端和服务端相互远程调用
- arm开发板的arm-linux-gcc4.5.1不能编译c++11新特性的解决方案
- github小教程
- http连接管理
- svn使用(一)
- TC文件上传