一、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...