Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
MoJieBlog opened this issue Jan 9, 2020 · 9 comments
Open

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

MoJieBlog opened this issue Jan 9, 2020 · 9 comments

Comments

@MoJieBlog
Copy link
Collaborator

No description provided.

@buptmaster
Copy link

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

@ghl7231699
Copy link

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

@MoJieBlog
Copy link
Collaborator Author

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

正解。

@yline
Copy link

yline commented Feb 26, 2020

题意不清晰:

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

@a14795860
Copy link

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

正解。

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

@yline
Copy link

yline commented Apr 16, 2020

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

正解。

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

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

@SongOnWater
Copy link

这个题应该是问假如两个单键表相交,请找出相交的位置的节点。
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;

}

@BlackC0
Copy link

BlackC0 commented Oct 18, 2022

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

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

@BlackC0
Copy link

BlackC0 commented Oct 18, 2022

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

8 participants