Leetcode 86. Partition List (链表好题)

  1. Partition List
    Medium

Given the head of a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

Example 1:

Input: head = [1,4,3,2,5,2], x = 3

Output: [1,2,2,4,3,5]

Example 2:

Input: head = [2,1], x = 2

Output: [1,2]

Constraints:

The number of nodes in the list is in the range [0, 200].

-100 <= Node.val <= 100

-200 <= x <= 200

解法1:

注意不能直接用node=node->next。

        ListNode *tmp = node->next;
        //node = node->next;
        node->next = NULL;
        node = tmp;

以 [1,4,3,2,5,2] 为例,5后面是2,如果不断开,就会形成环。

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode *dummy1 = new ListNode(0), *dummy2 = new ListNode(0);
        ListNode *node1 = dummy1, *node2 = dummy2, *node = head;
        while (node) {
            if (node->val < x) {
                node1->next = node;
                node1 = node1->next;
            } else {
                node2->next = node;
                node2 = node2->next;
            }
            ListNode *tmp = node->next;
            //node = node->next;
            node->next = NULL;
            node = tmp;
        }
        node1->next = dummy2->next;
        ListNode *res = dummy1->next;
        delete(dummy1); delete(dummy2);
        return res;
    }
};
相关推荐
一只鸡某几秒前
实习冲刺第二十九天
数据结构·c++·算法·leetcode
鲨鱼吃橘子13 分钟前
【C++融会贯通】哈希表的使用
c语言·开发语言·数据结构·c++·链表·哈希算法·散列表
ZZZ_O^O20 分钟前
【贪心算法入门第一题——860.柠檬水找零】
学习·算法·leetcode·贪心算法
走向自由2 小时前
Leetcode 最长回文子串
数据结构·算法·leetcode·回文·最长回文
luckilyil2 小时前
Leetcode 每日一题 11. 盛最多水的容器
算法·leetcode
A.A呐3 小时前
LeetCode 1658.将x减到0的最小操作数
算法·leetcode
hn小菜鸡3 小时前
LeetCode 144.二叉树的前序遍历
算法·leetcode·职场和发展
编程探索者小陈3 小时前
【优先算法】专题——双指针
数据结构·算法·leetcode
夫琅禾费米线3 小时前
leetcode2650. 设计可取消函数 generator和Promise
开发语言·javascript·leetcode·ecmascript
Sunyanhui13 小时前
力扣 三数之和-15
数据结构·算法·leetcode