本系列文章 part1 ~ part3 實作 Linked list 的幾個function
(1) NODE型態的定義
(2) GetNode
(3) FreeNode
(4) FindNode
(5) InsertNode
(6) DeleteNode
(7) ReverseList
(4) FindNode
輸入一個指標與data,從這個指標位置向後尋找一樣的值,回傳指標。
NODE* FindNode(NODE* ptr, int data)
{
NODE* pTempNode = ptr; //為了不動到原本指標,宣告一個新指標做移動
while( pTempNode->next != NULL && pTempNode != data )
{
pTempNode = pTempNode->next;
}
return pTempNode;
}
(5) InsertNode
插入節點可以分三個部份來討論,
1. 插在最前頭
2. 插在尾巴
3. 插在中間
NODE* InsertNode(NODE* pHead, NODE* ptr, int data)
{
NODE* NewNode = GetNode();
NewNode->data = data;
NewNode->next = NULL;
if( ptr == NULL ) //插在Head之前,ptr為NULL
{
NewNode->next = pHead;
pHead = NewNode;
}
else if( ptr->next == NULL) //插在尾巴之後,ptr的下個節點為NULL
{
ptr->next = NewNode;
}
else //插在中間,讓前面指向New,讓New指向後面
{
NewNode->next = ptr->next;
ptr->next = NewNode;
}
return pHead; //因為頭指標可能會變,回傳頭指標
}