算法 | Leetcode 面试题 02.04. 分割链表

编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。

示例:

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

题解:
/**
 * 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 cur = head;
        ListNode pre = head;

        while(cur!=null){
            if(cur.val<x){
                int tmp = cur.val;
                cur.val = pre.val;
                pre.val = tmp;
                pre = pre.next;
            }
            cur = cur.next;
        }
        return head;
    }
}

猜你喜欢

转载自blog.csdn.net/CYK5201995/article/details/106408555
今日推荐