Android-Daily-Interview icon indicating copy to clipboard operation
Android-Daily-Interview copied to clipboard

2020-01-09:如何判断单链表交叉?

Open MoJieBlog opened this issue 5 years ago • 9 comments

MoJieBlog avatar Jan 09 '20 01:01 MoJieBlog

先有A,B两个链表。A,B同时开始遍历。从A开始遍历,遍历至A链表尾部时转移至B链表开头。从B开始遍历,遍历至B链表尾部时转移至A开头。这样,两个指针相一致处非空即为交叉链表。

buptmaster avatar Jan 13 '20 01:01 buptmaster

如果两个链表相交的话,则它们的尾结点一定是相同的,呈横向的“Y”字型,那么最简单的方式就是分别遍历两个链表到结尾,对比结尾的值是否相等就可以了

ghl7231699 avatar Jan 13 '20 01:01 ghl7231699

如果两个链表相交的话,则它们的尾结点一定是相同的,呈横向的“Y”字型,那么最简单的方式就是分别遍历两个链表到结尾,对比结尾的值是否相等就可以了

正解。

MoJieBlog avatar Jan 13 '20 11:01 MoJieBlog

题意不清晰:

1,若两个单链表,则若有相交,则末尾节点相同 2,若单链表内部交叉,则判断单链表,是否为循环链表

yline avatar Feb 26 '20 12:02 yline

如果两个链表相交的话,则它们的尾结点一定是相同的,呈横向的“Y”字型,那么最简单的方式就是分别遍历两个链表到结尾,对比结尾的值是否相等就可以了

正解。

不赞同。 如果A链表的末尾结点 与 B链表的头结点相交的话,“对比结尾的值是否相等”就不成立了。

a14795860 avatar Apr 15 '20 16:04 a14795860

如果两个链表相交的话,则它们的尾结点一定是相同的,呈横向的“Y”字型,那么最简单的方式就是分别遍历两个链表到结尾,对比结尾的值是否相等就可以了

正解。

不赞同。 如果A链表的末尾结点 与 B链表的头结点相交的话,“对比结尾的值是否相等”就不成立了。

A链表的末尾节点和B链表的头结点相交,则要么B结点就一个,要么就是A的末尾结点不是真的末尾结点。。。不如,A肯定会继续B的往下面走。

yline avatar Apr 16 '20 14:04 yline

这个题应该是问假如两个单键表相交,请找出相交的位置的节点。 public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) { return null; }

ListNode currA = headA;
ListNode currB = headB;
int lengthA = 0;
int lengthB = 0;

// 让长的先走到剩余长度和短的一样
while (currA != null) {
    currA = currA.next;
    lengthA++;
}
while (currB != null) {
    currB = currB.next;
    lengthB++;
}

currA = headA;
currB = headB;
while (lengthA > lengthB) {
    currA = currA.next;
    lengthA--;
}
while (lengthB > lengthA) {
    currB = currB.next;
    lengthB--;
}

// 然后同时走到第一个相同的地方
while (currA != currB) {
    currA = currA.next;
    currB = currB.next;
}
// 返回交叉开始的节点
return currA;

}

SongOnWater avatar Aug 10 '20 03:08 SongOnWater

如果两个链表相交的话,则它们的尾结点一定是相同的,呈横向的“Y”字型,那么最简单的方式就是分别遍历两个链表到结尾,对比结尾的值是否相等就可以了

为什么两链表相交 则尾节点相同?A,B两链表不能走出“X”字型吗

BlackC0 avatar Oct 18 '22 08:10 BlackC0

如果两个链表相交的话,则它们的尾结点一定是相同的,呈横向的“Y”字型,那么最简单的方式就是分别遍历两个链表到结尾,对比结尾的值是否相等就可以了

是不是交叉点意味着内存地址相同?如果这样就能解释一定是Y字型

BlackC0 avatar Oct 18 '22 08:10 BlackC0