分割链表
- leetcode 86 分割链表 (中等)
- 解题思路:
- 链表专题
leetcode 86 分割链表 (中等)
leetcode 86 分割链表 原题链接,可以直接测试
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例1:
>输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
示例2:
输入:head = [2,1], x = 2
输出:[1,2]
提示:
链表中节点的数目在范围 [0, 200] 内
-100 <= Node.val <= 100
-200 <= x <= 200
解题思路:
建立两个临时链表,一个用来链接小于给定值的节点,一个来链接大于等于的节点,然后再将两个链表连接在一起。就变得很简单了。
代码演示:
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode partition(ListNode head, int x) {if(head == null){return null;}//用来链接小于给定值的临时链表ListNode dump1 = new ListNode(0);//大于等于的节点的临时链表ListNode dump2 = new ListNode(0);//下面三个指针,用来移动比较节点的值ListNode p1 = dump1;ListNode p2 = dump2;ListNode p = head;while(p != null){if(p.val < x){p1.next = p;p1 = p;}else{p2.next = p;p2 = p;}//将p 的next 指针断开,p来到他下一个指针位置。ListNode temp = p.next;p.next = null;p = temp;}//将两个临时链表合并起来,p1.next = dump2.next;//返回第一个节点。return dump1.next;}
}
链表专题
将一个链表按给定值分成小于等于和大于三个部分
leetcoe–合并 K 个升序链表(java)
leetcode–删除链表的倒数第N个节点(java)
合并两个有序链表(java)
leetcode–环形链表.找到入环节点(java)
LeetCode:相交链表(java)