LeetCode 92 25 23 鍊錶的有關操作

2021-09-05 09:15:12 字數 1451 閱讀 4705

一、92.反轉鍊錶ii

思路即分別定位第m個和第n個結點(若不存在,則直接返回首結點),從m到n-1,摘下每乙個結點,並插入到第n個結點之後

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

pm=ptr;

while(i<=n)

pn=ptr;

while(pm->next!=pn)

return fakehead.next;

}};

二、25.k個一組翻轉鍊錶

思路類似第92題,把每個ak+1當作m,每個ak當作n即可

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

if(pk==null || cntnext!=pk)

temphead=nexttemphead;

pk=temphead;

} return fakehead.next;

}};

三、23.合併k個排序鍊錶

思路1.基於21題合併兩個排序鍊錶,k個排序鍊錶的合併可通過兩兩合併來實現

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

else

ptr->next=temp;

ptr=ptr->next;

}if(p!=null)

ptr->next=p;

if(q!=null)

ptr->next=q;

return fakehead.next;

}listnode* mergeklists(vector& lists)

return lists.front();

}};

思路2.參考了這篇部落格,從合併兩個排序鍊錶受到啟發,構造新煉表時,每次取用的結點為兩個鍊錶尚未取過的結點中,值較小的乙個,因此可以利用優先佇列來維護候選結點(用這種方法應當注意空鍊錶的處理)

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

}; listnode* mergeklists(vector& lists)

ptr->next=null;

return ans;

}};

Leetcode 鍊錶

解題思路 跟蹤進製,逐位相加 public static listnode add listnode l1,listnode l2 檢查 carry 1carry 1 是否成立,如果成立,則向返回列表追加乙個含有數字 11 的新結點。if carry 0 返回頭結點的下乙個節點,因為頭結點初始化為0...

LeetCode 鍊錶

目錄 一 反轉鍊錶 型別 二 雙指標型別 三 鍊錶合併型別 四 鍊錶排序 206.反轉鍊錶 definition for singly linked list.struct listnode class solution return pre 遞迴實現 class solution 92.反轉鍊錶 ...

(LeetCode)鍊錶

鍊錶問題可以用遞迴或者迴圈解決,相對來講,迴圈解決更加直觀,可以優先使用。笨辦法1.遍歷鍊錶,生成乙個陣列 2.根據陣列,倒序建立鍊錶 聰明辦法 改指標方向 笨辦法 遍歷兩個鍊錶,得到陣列 將陣列排好序 生成乙個新的鍊錶 聰明解法 遞迴 if l1 is none return l2 if l2 i...