题目
输入两个链表,找出它们的第一个公共节点。
思路
典型的数据结构的链表题。解法非常经典。我感觉leetcode给的题解比我在王道数据结构上看的要简单清晰明了很多,也优雅很多。
大体思路就是,设置两个指针a和b,分别从头开始遍历两个链表ha和hb,直到两指针相遇为止a==b。如果a遍历完了链表ha,则从链表hb开始遍历,指针b同理。
最后返回a即可。
代码
/**
* 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 a=headA,b=headB;
while(a!=b){
if(a!=null){
a=a.next;
}else {
a=headB;
}
if(b!=null){
b=b.next;
}else{
b=headA;
}
}
return a;
}
}
需要注意的一点是:因为当两个链表没有公共节点时,就会返回null作为公共节点,因此判断条件是a!=null和b!=null,而不是a.next!=null和b.next!=null。