我正在寫一個簡單的鏈接列表附加代碼。 如果我再次添加相同的節點...我得到無限循環問題。Single Link List Addition - 無限循環
的代碼如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct _linklist
{
int iNodeId;
struct _linklist *pNextNode;
}LINKLIST;
void printNode(LINKLIST **pNode)
{
LINKLIST *pCurNode = *pNode;
while(NULL != pCurNode)
{
printf("pCurNode->iNodeId %d\n", pCurNode->iNodeId);
pCurNode = pCurNode->pNextNode;
}
printf("\n");
}
void AddNode(LINKLIST **pNode, LINKLIST *pNewNode)
{
LINKLIST *pHead = *pNode;
if (NULL == pHead)
{
*pNode = pNewNode;
}
else
{
while(NULL != pHead->pNextNode)
{
pHead = pHead->pNextNode;
}
pHead->pNextNode = pNewNode;
}
}
void main()
{
int iNodeCnt = 0;
LINKLIST *pNode1;
LINKLIST *pNode2;
LINKLIST *pNode3;
LINKLIST **pNode = (LINKLIST **)malloc(sizeof(LINKLIST *)); // Double pointer to hold the link list.
*pNode = NULL;
pNode1 = (LINKLIST *)malloc(sizeof(LINKLIST));
pNode1->iNodeId = ++iNodeCnt;
pNode1->pNextNode = NULL;
pNode2 = (LINKLIST *)malloc(sizeof(LINKLIST));
pNode2->iNodeId = ++iNodeCnt;
pNode2->pNextNode = NULL;
pNode3 = (LINKLIST *)malloc(sizeof(LINKLIST));
pNode3->iNodeId = ++iNodeCnt;
pNode3->pNextNode = NULL;
AddNode(pNode, pNode1);
AddNode(pNode, pNode2);
AddNode(pNode, pNode3);
printNode(pNode);
AddNode(pNode, pNode1);
printNode(pNode); // goes into infinite loop. ????
getchar();
}
希望的代碼是可以理解的。
這裏,第二個printNode()進入無限循環。
AddNode()有什麼問題嗎?
謝謝奧拉夫,OOGA和伊曼...修改後 工作代碼:
LINKLIST *pNode4;
AddNode(pNode, pNode1);
AddNode(pNode, pNode2);
AddNode(pNode, pNode3);
printNode(pNode);
// Copy the Node1 to Node4 and then call AddNode()
pNode4 = (LINKLIST *)malloc(sizeof(LINKLIST));
pNode4->iNodeId = pNode1->iNodeId;
pNode4->pNextNode = NULL; // Set the pNextNode to NULL
AddNode(pNode, pNode4);
printNode(pNode);
getchar();
你可以在你的問題中包含一些'printf'輸出嗎? –