题意:输入两个链表,找出它们的第一个公共节点。
解题思路
解法1:
1.刚开始看题,很容易被绕晕,明明看用例,第一个是1相同,为什么用例结果是8呢?经过仔细看题分析,发现说的是内存地址和val都相同,所以这样的话,问题就很简单了
2.最简单的解法,双层while循环,我们针对于headA每个节点,去遍历headB,是否节点相等(注意此处是指headA == headB
),如果存在这样的节点,则直接返回
解法2:
我们使用两个指针 node1,node2 分别指向两个链表 headA,headB 的头结点,然后同时分别逐结点遍历,当 node1 到达链表 headA 的末尾时,重新定位到链表 headB 的头结点;当 node2 到达链表 headB 的末尾时,重新定位到链表 headA 的头结点。
这样,当它们相遇时,所指向的结点就是第一个公共结点。
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
while (headA != null) {
ListNode temp = headB;
while (temp != null) {
if (headA == temp) {
return headA;
}
temp = temp.next;
}
headA = headA.next;
}
return null;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
}
##解法2
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode pa = headA, pb = headB;
while (pa != pb) {
pa = pa == null ? headB : headA.next;
pb = pb == null ? headA : headB.next;
}
return pa;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
}
网友评论