问题描述: 给出指向两个链接列表的头节点的指针,这两个链接列表在某个节点上合并在一起。找到发生此合并的节点。两个头节点将会不同,都不会为NULL。通过颠倒列表查找两个列表的合并点
输入格式 您必须完成int FindMergeNode(Node * headA,Node * headB)方法,该方法接受两个参数 - 链接列表的头部。你不应该读取标准输入/控制台的任何输入。
输出格式 查找两个列表合并并返回该节点的数据的节点。不要将任何东西打印到标准输出/控制台。
我想扭转这两个列表,然后分别走过他们每个人,直到我到达最后一个公共节点。但是在测试时,它没有给出正确的输出。 我的想法是错的还是我的代码错了?这是一个好方法还是坏方法?
我的代码:
int FindMergeNode(Node headA, Node headB) {
//Reverse listA
Node currentA = headA;
Node prevA = null;
Node NextA;
while(currentA!=null){
NextA = currentA.next;
currentA.next = prevA;
prevA = currentA;
currentA = NextA;
}
headA = prevA;
//Reverse listB
Node currentB = headB;
Node prevB = null;
Node NextB;
while(currentB!=null){
NextB = currentB.next;
currentB.next = prevB;
prevB = currentB;
currentB = NextB;
}
headB = prevB;
//Iterate throught the reversed list and find the last common node.
Node n = headA;
Node m = headB;
while(n.next!=m.next){
n = n.next;
m = m.next;
}
return n.data;
}
链接问题:https://www.hackerrank.com/challenges/find-the-merge-point-of-two-joined-linked-lists
编辑:从KARTHIK的回答,我修改了第三while循环,但它毕竟是给了错误的输出。
//Iterate throught the reversed list and find the last common node.
Node n = headA;
Node m = headB;
while(n.next == m.next){
n = n.next;
m = m.next;
}
return n.data;
节点*是不是Java的语法,可能是它是一个C或C++程序?如果是这样,更改标签 –