// 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...