题目描述
编写一个程序,找到两个单链表相交的起始节点。
如下面的两个链表:
在节点 c1 开始相交。
思路
思路1
遍历两个链表,分别统计出两个链表的长度,然后较长的链表先往前走长度之差步 然后两个链表同时向后遍历直到找到相交的交点
思路2
两个链表同时遍历,较短的链表遍历完后重新指向另一个链表的头节点直到较长的链表遍历到末尾,这时将其指向短链表的头节点,两指针同步往前遍历直到遍历到同一节点
代码
/**
* 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) {
if(headA==null||headB==null) return null;
ListNode nodeA = headA;
ListNode nodeB = headB;
while(nodeA!=nodeB){
nodeA = nodeA==null? headB:nodeA.next;
nodeB = nodeB==null? headA:nodeB.next;
}
return nodeA;
}
}