题目
题目链接:
算法 = 双指针交替前行 & 题目特征 = 需要同时遍历两个链表,并且在遍历的过程中根据节点值的大小进行操作
参考题解:https://leetcode.cn/problems/partition-list/solutions/2362068/86-fen-ge-lian-biao-shuang-zhi-zhen-qing-hha7/
把原链表分为俩个链表,smlDummy 放小于 x 的元素, bigDummy 放大于 x 的元素。
他的解法是什么?
- 双指针交替而行。
他为什么用这个解法?文章来源:https://www.toymoban.com/news/detail-733172.html
- 题目特征:链表一分为二。
具体实现用了俩个头节点。为什么使用头结点?文章来源地址https://www.toymoban.com/news/detail-733172.html
- 需要创造一条新链表的时候,可以使用虚拟头结点简化边界情况的处理。
- 比如,把两条有序链表合并成一条新的有序链表,是不是要创造一条新链表?再比你想把一条链表分解成两条链表,是不是也在创造新链表?这些情况都可以使用虚拟头结点简化边界情况的处理。
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
// 新建两个链表
ListNode *smlDummy = new ListNode(0), *bigDummy = new ListNode(0);
// 遍历链表
ListNode *sml = smlDummy, *big = bigDummy;
while (head != nullptr) {
// 将 < x 的节点加入 sml 节点后
if (head->val < x) {
sml->next = head;
sml = sml->next;
// 将 >= x 的节点加入 big 节点后
} else {
big->next = head;
big = big->next;
}
head = head->next;
}
// 拼接两链表
sml->next = bigDummy->next;
big->next = nullptr;
return smlDummy->next;
}
};
到了这里,关于86. 分隔链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!