leetcode--分隔链表(java)

分割链表

  • leetcode 86 分割链表 (中等)
  • 解题思路:
  • 链表专题

leetcode 86 分割链表 (中等)

leetcode 86 分割链表 原题链接,可以直接测试

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。

示例1:
leetcode--分隔链表(java)_第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)

你可能感兴趣的:(算法,java,面试,链表,leetcode,java)