careercup 鍊錶 2 5

2021-09-06 20:00:27 字數 904 閱讀 3504

2.5 給定兩個用鍊錶表示的整數,每個結點包含乙個數字。這些數字是反向存放的,也就是個位排在鍊錶首部。編寫函式對這兩個整數求和,並用鍊錶形式返回結果。

示例:輸入: (7->1->6)+(5->9->2),即617+295.

輸出:2->1->9,即912.

高階:假設這些數字是正向存放的

示例:輸入:(6->1->7)+(2->9->5),即617+295.

輸出:9->1->2,即912.

逆向存放時,c++實現:

#include#include

using

namespace

std;

struct

listnode

};void createlist(listnode *&l,int arr,int

n)

else

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

while

(p)

listnode *tmp=null;

while

(q)

if(carry==1

)

return

l1;}

intmain()

;

int arr2[5]=;

createlist(l1,arr1,3);

createlist(l2,arr2,2);

listnode *head=merge(l1,l2);

listnode *p=head;

while

(p)

cout

<}

正向存放時,可以先利用頭插入將兩個鍊錶逆轉,然後按照上面的過程求和。

careercup 鍊錶 2 3

2.3實現乙個演算法,刪除單向鍊錶中間的某個結點,假設你只能訪問該結點。即你不知道頭結點 這個問題的關鍵是你只有乙個指向要刪除結點的指標,如果直接刪除它,這條鍊錶就斷了。但你又沒辦法得到該結點之前結點的指標,是的,它連頭結點也不提供。在這種情況下,你只能另覓他徑。重新審視一下這個問題,我們只能獲得從...

careercup 鍊錶 2 1

2.1 編寫 移除未排序鍊錶中的重複節點。不使用臨時快取 如果不允許使用臨時的快取 即不能使用額外的儲存空間 那需要兩個指標,當第乙個指標指向某個元素時,第二個指標把該元素後面與它相同的元素刪除,時間複雜度o n2 c 實現 include include using namespace std s...

careercup 鍊錶 2 7

2.7 編寫乙個函式,檢查鍊錶是否為回文。思路 1 可以利用鍊錶中的元素採用頭插法建立乙個新的鍊錶,然後比較兩個鍊錶的元素是否相等。2 利用快慢指標,將鍊錶後半部分逆轉之後,比較前半部分與後半部分是否相等。3 利用棧將鍊錶中的元素儲存,然後彈出與鍊錶中元素比較。c 實現 include includ...