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; } }