面試金典 2 5 鍊錶加法(包含鍊錶的建立)

2021-07-22 01:53:39 字數 1149 閱讀 7200

兩個鍊錶代表兩個整數,每個節點包含乙個數字,這些數是正向存放的,編寫函式求兩個整數的和,並用鍊錶形式返回結果。

如: 兩個整數為935165, 418

則鍊錶形式為 9 -> 3 -> 5 -> 1 -> 6 -> 5, 4 -> 1 -> 8

由於root節點是高位,因此從鍊錶尾開始求和,用到遞迴

同時由於長短不一,因此需要對短的鍊錶先進行補充節點,前面新增0節點

//

// main.cpp

// pract

//// created by zjl on 16/8/22.

//#include using namespace std;

struct listnode

};void createlist(listnode* root, int a, int len)

}int getlen(listnode* l)

return len;

}listnode* addlist(listnode* root, int num)

return root;

}listnode* getsum(listnode* root1, listnode* root2)

result->val = root1->val + root2->val + carry;

return result;

}listnode* solve(listnode* l1, listnode* l2)

void printlist(listnode* root)

}int main(int argc, const char * argv) ;

int b[6] = ;

listnode* root1 = new listnode(0), *root2 = new listnode(0);

createlist(root1, a, 3);

createlist(root2, b, 6);

listnode* res = solve(root1, root2);

printlist(res);

return 0;

}

輸入:935165,418

輸出:9 3 5 5 8 3

程式設計師面試金典 鍊錶

這裡我們可以使用乙個表來記錄訪問過的節點值,這樣只要一次遍歷就可以。但是需要輔助空間。如果不使用臨時緩衝區,該怎麼解決?使用兩個指標,乙個指標指向當前節點,另乙個指標用於向後遍歷剩餘節點,把重複節點刪除。這裡刪除只是用乙個節點就可以,檢查ptr next data是否重複就可以。這裡給出兩種方法 第...

《程式設計師面試金典》回文鍊錶

題目描述 請編寫乙個函式,檢查鍊錶是否為回文。給定乙個鍊錶listnode phead,請返回乙個bool,代表鍊錶是否為回文。測試樣例 返回 true 返回 false 思路我們有兩種方法,比較容易想到的方法應該是使用棧儲存前一半的結點,然後對於後一半的結點再乙個個的與棧內的結點比較是否相等 還有...

程式設計師面試金典 2 4 鍊錶分割

編寫 以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 給定乙個鍊錶的頭指標 listnode phead,請返回重新排列後的鍊錶的頭指標。注意 分割以後保持原來的資料順序不變。struct listnode class partition else else else...