时间限制:1秒 空间限制:32768K 热度指数:287346
本题知识点: 链表
算法知识视频讲解
题目描述
输入两个链表,找出它们的第一个公共结点。
我们可以先遍历一遍找出两个链表的长度,长的一方先让指针指向与另一个链表在同一个节点上,使两个链表的后续长度相同,然后同时推动两个链表的指针前进,如果相等就返回该节点。
实现代码如下:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
int length1 = getNodeLength(pHead1);
int length2 = getNodeLength(pHead2);
ListNode nodeLong = pHead1;
ListNode nodeShort = pHead2;
int len = length1 - length2;
if(len <0){
nodeLong = pHead2;
nodeShort = pHead1;
len = length2 - length1;
}
for(int i = 0;i<len;i++){
nodeLong = nodeLong.next;
}
while(nodeLong != null && nodeShort != null && nodeLong != nodeShort){
nodeLong = nodeLong.next;
nodeShort = nodeShort.next;
}
ListNode commonNode = nodeLong;
return nodeLong;
}
private static int getNodeLength(ListNode head){
int length = 0;
ListNode tempNode = head;
while(tempNode != null){
tempNode = tempNode.next;
length++;
}
return length;
}
}