160.相交链表
1.题目描述:
编写一个程序,找到两个单链表相交的起始节点。
2.解题思路及代码
设置双指针,分别指向两个链表头部,向后遍历,到达表尾后指向另一指针的头部,则某一时刻两个指针指向的结点相同,若链表相交,则指向非空结点,若不相交,则同指向NULL.
代码如下:
/** * 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 pa=headA; ListNode pb=headB; while(pa!=pb){ pa=(pa==null)?headB:pa.next; pb=(pb==null)?headA:pb.next; } return pa; } }
3.算法分析:
时间复杂度:O(M+N)