[ C語言生活記事 ] 資料結構 linked list 實作 (2)

本系列文章 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;               //因為頭指標可能會變,回傳頭指標
}