第一個函式,linkAndMove,用于基本的鏈接和移動點程序。
Union函式用于查找鏈接串列la和lb中的所有數字(沒有重復)
我的測驗例子。la {1,3} lb{3,5}
但是在最后的時候,la指向NULL,而lb指向5。
在第一個函式linkAndMove之后,串列la變成了{1,3,5}
為什么la的末端節點從NULL變成了lb現在的節點5?

before first function

第一個函式之后
void linkAndMove(slink **pNode, slink **qNode, slink **finNode,
int linkFlag, int moveFlag) {
if (linkFlag == -1 || moveFlag == -1) {
cout << "ERROR! 基本鏈接串列程序中沒有匹配的邏輯。" << endl。
exit(1)。
}
switch (linkFlag) {
case 0:
if ((*finNode)->data != (*pNode)-> data) {
(*finNode)->next = (slink *) malloc(sizeof(MemLEN)) 。
(*finNode)->Next = (*pNode);
(*finNode) = (*finNode)->next;
}
break。
case 1:
if ((*finNode)->data != (*qNode)->data) {
(*finNode)->next = (slink *) malloc(sizeof(MemLEN)) 。
(*finNode)->Next = (*qNode);
(*finNode) = (*finNode)->next;
}
break。
case 2:
break;
default:
cout << "ERROR! 基本鏈接串列程序中沒有匹配的邏輯。" << endl。
exit(1)。
}
switch (moveFlag) {
case 0:
(*pNode) = (*pNode)->接下來。
break;
case 1:
(*qNode) = (*qNode)->接下來。
break;
case 2:
(*pNode) = (*pNode)->接下來。
(*qNode) = (*qNode)->下一個。
break。
default:
cout << "ERROR! 基本鏈接串列程序中沒有匹配的邏輯。" << endl。
exit(1)。
}
}
void Union(slink *la, slink *lb, slink *lc){
slink *pNode, *qNode;
pNode = la->next;
qNode = lb->下一個。
int linkFlag, moveFlag;
while (pNode != NULL || qNode != NULL) {
linkFlag = -1;
moveFlag = -1;
if (pNode == NULL) {
linkFlag = moveFlag = 1;
} else if (qNode == NULL) {
linkFlag = moveFlag = 0;
} else {
if (pNode-> data > qNode-> data) {
linkFlag = 1;
moveFlag = 1;
} else if (pNode-> data < qNode-> data) {
linkFlag = 0;
moveFlag = 0;
} else {
linkFlag = 0;
moveFlag = 2;
}
}
/* if (pNode == NULL) {
linkAndMove(NULL, &qNode, &lc, linkFlag, moveFlag)。
} else*/
linkAndMove(&pNode, &qNode, & lc, linkFlag, moveFlag)。
}
}
uj5u.com熱心網友回復:
我找到了原因。
因為在函式linkAndMove中,指標finNode被連接到串列la的節點。在以前的代碼中,使用節點的next來連接pNode,所以將la的結束節點從NULL改為該節點。
我找到的解決方案是為串列lc創建新的節點,它不能感染原始的資料串列la。這里的代碼。
switch(linkFlag) {
case 0:
if ((*finNode)->data != (*pNode)-> data) {
(*finNode)->next = initLinkNode();
(*finNode) = (*finNode)->next;
(*finNode)->資料=(*pNode)->資料。
}
break。
case 1:
if ((*finNode)->data != (*qNode)->data) {
(*finNode)->next = initLinkNode();
(*finNode) = (*finNode)->next;
(*finNode)->資料=(*qNode)->資料。
}
break。
case 2:
break;
default:
cout << "ERROR! 基本鏈接串列程序中沒有匹配的邏輯。" << endl。
exit(1)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/315435.html
標籤:
上一篇:在類的建構式中使用這個指標陣列c
下一篇:指標算術和結構內的比較
