LeetCode:分割链表【86】

LeetCode:分割链表【86】

题目描述

给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

你应当保留两个分区中每个节点的初始相对位置。

示例:

输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5

题目分析

  这道题有总体思路是从头到尾扫描一次链表,将那些小于的节点放在一条链表上,大的放到一条链表上,最后两条一拼接即可。

  由于题目给的条件宽泛,我们可以直接创建新的节点,也可以使用断链法来让节点重新指向。

Java题解

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
  public  ListNode partition(ListNode head, int x) {
        ListNode less =new ListNode(0);
        ListNode over =new ListNode(0);

        ListNode ptr = head;
        ListNode ptrLess = less;
        ListNode ptrOver = over;
      
        while(ptr!=null)
        {
            if(ptr.val<x) {
                ptrLess.next = new ListNode(ptr.val);
                ptrLess=ptrLess.next;
            }else{
                ptrOver.next=new ListNode(ptr.val);
                ptrOver=ptrOver.next;
            }
            ptr=ptr.next;
        }
        ptrLess.next=over.next;
        return less.next;
    }
}

猜你喜欢

转载自www.cnblogs.com/MrSaver/p/9931834.html