题目:
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.
这个应该是链表中的双指针大法,
他能解决的问题
1.判断链表有没有环
2.求倒数第k个节点
3.找两个链表的交点
在这里,连个链表可能不一定长,将较长的链表走两链表长度差,然后两个链表一同走,判断是不是同一个节点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public int list_len(ListNode list){
ListNode temp=list;
int count=0;
while(temp!=null){
temp=temp.next;
count++;
}
return count;
}
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lenA=list_len(headA);
int lenB=list_len(headB);
ListNode tempA=headA;
ListNode tempB=headB;
int len=Math.abs(lenA-lenB);
if(lenA>lenB){
for(int i=0;i<len;i++){
tempA=tempA.next;
}
}else{
for(int i=0;i<len;i++){
tempB=tempB.next;
}
}
while(tempA!=null&&tempA!=tempB){
tempA=tempA.next;
tempB=tempB.next;
}
return tempA;
}
}