LeetCode鍊錶的幾道基礎題

2021-09-29 21:15:22 字數 2040 閱讀 8423

// an highlighted block

* definition for singly-linked list.

* struct listnode *}

;*/class

solution

else

overload=0;

pcurrent-

>next=

newlistnode

(sum)

;//將當前的值賦給第一位;也就是個位數;

pcurrent=pcurrent-

>next;

//當前的位置往下進行;也就是十位數

if(l1) l1=l1-

>next;

//l1鍊錶往後遍歷;

if(l2) l2=l2-

>next;

//l2鍊錶往後遍歷;

}return phead-

>next;}}

;

思路:

首先建立乙個鍊錶和對應的指標

建立乙個進製標誌位

while(l1||l2||overload)不可省去 overload 會造相同長度無法進製的問題。

計算個位

判斷是否大於10 否則進製等於1

之後將 當前的值付給第一位 pcurrent=new listnode(sum)

指標也隨後進製到下一位pcurrent=pcureent->next;

隨後將l1 l2 往後遍歷。

思路:用乙個快慢指標 快指標比滿指標快n 步 當快指標等於0的時候 slow-next=slow->next->next 具體解釋可見部分題解。

// an highlighted block

/** * definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(pre!=

null

) pre-

>next=pslow-

>next;

if(pslow==head)

return head-

>next;

pslow-

>next=

null

;return head;

// pslow->next=pslow->next->next;//刪掉倒數第二個

// return dummy->next;}}

;

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。

示例:輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

思路: 建立乙個新的鍊錶 從頭開始對l1 l2鍊錶的第乙個節點比較(排除掉其他因素:鍊錶為空) 取較小的放在新的鍊錶中 此煉表進一位,隨後繼續在兩個鍊錶進行比較直到鍊錶都為空。

// an highlighted block

class

solutionif(

!l1)if(

!l2)

while

(l1&&l2)

else

//point=point->next;}if

(l1 ==

null

) head-

>next = l2;

else

head-

>next = l1;

return point-

>next;}}

;

在上面函式的基礎上加上下面這個函式

// an highlighted block

listnode*

mergeklists

(vector>

& lists)

k*=2;

}if(n>0)

else

{return nullptr;

王道上幾道鍊錶的小題(上)

void del x linklist l,elemtype x if l data x else 普通方式 void del x linklist l,elemtype x else 尾插法,值不為x的結點尾插建表,值為x的結點釋放 void del x linklist l,elemtype x...

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...