本文主要是介绍LeetCode--160. Intersection of Two Linked Lists,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Problem:
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2↘c1 → c2 → c3↗
B: b1 → b2 → b3
begin to intersect at node c1.
Notes: If the two linked lists have no intersection at all, return null. The linked lists must retain their original structure after the function returns. You may assume there are no cycles anywhere in the entire linked structure. Your code should preferably run in O(n) time and use only O(1) memory.
Analysis:
- 查找两个链表的第一个公共节点
- 解法一: 第一遍循环,找出两个链表的长度差N 第二遍循环,长链表先走N步,然后同时移动,判断是否有相同节点
- 为了节省计算,在计算链表长度的时候,顺便比较一下两个链表的尾节点是否一样,节省内存。
Answer:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val = x;* next = null;* }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode res;int lenA = len(headA);int lenB = len(headB);if(lenA>=lenB) res=interNode(headA,headB,lenA,lenB);else res=interNode(headB,headA,lenB,lenA);return res;}//求列表的长度public int len(ListNode head){int length=0;while(head!=null){length++;head=head.next;}return length;}//遍历两个链表是否有相同节点直到结尾,如果有返回开始相同节点public ListNode interNode(ListNode longlist,ListNode shortlist,int lenA,int lenB){for(int i=0;i<lenA-lenB;i++){longlist=longlist.next;}ListNode start=null;for(int i=0;i<lenB;i++){if(longlist.val==shortlist.val){start=longlist;break;}longlist=longlist.next;shortlist=shortlist.next;}return start;}/*考虑了第一个节点相同后面有不相同的节点这种情况,内存超了public ListNode interNode(ListNode longlist,ListNode shortlist,int lenA,int lenB){for(int i=0;i<lenA-lenB;i++){longlist=longlist.next;}ListNode start=null;boolean isSame=false;for(int i=0;i<lenB;i++){if(longlist.val==shortlist.val){start=longlist;isSame = true;}else {if(isSame) return null;}longlist=longlist.next;shortlist=shortlist.next;}return start;}*/
}
这篇关于LeetCode--160. Intersection of Two Linked Lists的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!