所以这是我在这里的第一篇文章。我在递归地合并两个链表时遇到麻烦。很明显,即使经过大量研究,我对链接列表/指针的理解也不尽如人意。非常令人沮丧。这是我的(糟糕的)代码,不起作用:
void SortedMergeRecur(Node*& xHead, Node*& yHead, Node*& zHead){
if (xHead == 0 && yHead == 0){ //empty list
return;
}
else if (xHead != 0 && yHead == 0){ //if y empty, put x into new
zHead = xHead;
zHead->link = xHead->link;
return SortedMergeRecur(xHead->link, yHead, zHead->link);
}
else if (xHead == 0 && yHead != 0){ //if x empty, put y into new
zHead = yHead;
zHead->link = yHead->link;
return SortedMergeRecur(xHead, yHead->link, zHead->link);
}
else { //niether empty
if (xHead->data <= yHead->data){
zHead = xHead;
zHead = zHead->link;
zHead->data = yHead->link->data;
zHead = zHead->link;
return SortedMergeRecur(xHead->link, yHead->link, zHead);
}
else {
zHead = yHead;
zHead = zHead->link;
zHead->data = xHead->link->data;
zHead = zHead->link;
return SortedMergeRecur(xHead->link, yHead->link, zHead);
}
}
}
链接列表定义为此结构:
struct Node
{
int data;
Node *link;
};
我感到困惑,沮丧和迷茫。帮助将不胜感激。我了解执行此操作背后的逻辑,但是我不知道如何以需要操纵指针的方式操纵指针。
答案 0 :(得分:0)
我知道了。我通过函数调用传递xHead-> link或yHead-> link(需要使用的那个),然后递增zHead = zHead-> link……我不知道为什么现在可以使用,但是是的。
void SortedMergeRecur(Node*& xHead, Node*& yHead, Node*& zHead){
if (xHead == 0 && yHead == 0){ //empty lists
return;
}
else if (xHead != 0 && yHead == 0){ //if y empty, put x into new
zHead = xHead;
zHead->link = xHead->link;
xHead = xHead->link;
return SortedMergeRecur(xHead, yHead, zHead->link);
}
else if (xHead == 0 && yHead != 0){ //if x empty, put y into new
zHead = yHead;
zHead->link = yHead->link;
yHead = yHead->link;
return SortedMergeRecur(xHead, yHead, zHead->link);
}
else { //niether empty
if (xHead->data <= yHead->data){
zHead = xHead;
zHead->link = xHead->link;
xHead = xHead->link;
return SortedMergeRecur(xHead, yHead, zHead->link);
}
else {
zHead = yHead;
zHead->link = yHead->link;
yHead = yHead->link;
return SortedMergeRecur(xHead, yHead, zHead->link);
}
}
}