Partition List

mac2024-06-04  52

描述 Given 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. For example, Given 1->4->3->2->5->2 and x = 3, return 1->2->2->4->3->5. 分析 比较简单的一道题,需要根据 X 将链表分区,并且保持原有顺序不变。最简单的做法就是生命两个头结点,然后采用尾插法的方式一次将满足条件的节点查到对应的链表中,最后将两条链表链接。注意一个小细节,最后在返回的时候需要将最后一个节点的 next 值为 null,否则可能导致链表有循环。

代码

// 时间复杂度O(n),空间复杂度O(1) class Solution { public ListNode partition(ListNode head, int x) { ListNode left_dummy = new ListNode(-1); // 头结点 ListNode right_dummy = new ListNode(-1); // 头结点 ListNode left_cur = left_dummy; ListNode right_cur = right_dummy; for (ListNode cur = head; cur != null; cur = cur.next) { if (cur.val < x) { left_cur.next = cur; left_cur = cur; } else { right_cur.next = cur; right_cur = cur; } } left_cur.next = right_dummy.next; right_cur.next = null; return left_dummy.next; } };
最新回复(0)