單鏈表反轉,要求空間複雜度O(1)
阿新 • • 發佈:2019-02-19
這是一道筆試題:
給你一個指向單鏈表表頭的指標,要你把整個連結串列反轉,並且空間複雜度為O(1),最後返回指向新的連結串列頭的指標。連結串列節點結構和函式頭已給出:
struct LinkNode
{
int data;
LinkNode *next;
};
LinkNode* ReverseLink(LinkNode *head)
{
}
分析:
基礎題,空間複雜度O(1)意味著不能複製一個臨時連結串列出來,必須在原連結串列上直接操作。However,就算題目不要求空間複雜度O(1),我相信也不會有人捨近求遠去建立一個臨時連結串列。
程式碼:
LinkNode* ReverseLink(LinkNode *head) { LinkNode *nowHead = head, *sourceLink = head->next, *tempNode = NULL; while (sourceLink != NULL) { tempNode = sourceLink; // 把源連結串列首節點取出 sourceLink = sourceLink->next; // 源連結串列首節點後移 tempNode->next = nowHead; // 取出的節點接在目標連結串列的首部 nowHead = tempNode; // 目標連結串列首部更改為新的節點 } head->next = NULL; // 別忘了把原先的連結串列頭指向NULL return nowHead; }