题目描述
输入两个链表,找出它们的第一个公共结点。
c1就是其第一个公共节点
以下是本篇文章正文内容,下面案例可供参考
解题思路
- 定义
l
、s
分别代表两个链表,先求出两个链表的长度,判断其差值,让长的那个先走,直到两个链表长度相同 - 判断
l
、s
是否相等,若相等,直接返回l
或s
代码如下
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode l = pHead1;
ListNode s = pHead2;
if (pHead1 == null || pHead2 == null)
return null;
int len1 = size(l);
int len2 = size(s);
//l长先让l跑到和s一样长
if (len1 >= len2) {
int len = len1 - len2;
while (len != 0) {
l = l.next;
len--;
}
}
//s长让s先跑到和l一样长
else if (len1 < len2) {
int len = len2 - len1;
while (len != 0) {
s = s.next;
len--;
}
}
//两个一起走,相等则返回的是第一个公共节点
while(l!=s){
l=l.next;
s=s.next;
}
return l;
}
// 求链表的长度
public static int size(ListNode pHead) {
int length = 0;
ListNode cur = pHead;
while (cur != null) {
length++;
cur = cur.next;
}
return length;
}
}
总结
此题有更简便的方法,但是这种解法更好理解
如果本文对你有所帮助,要记得点赞评论哦~
若是有描述不准确的地方,欢迎大家评论区指正,一起学习~