算法练习--分割链表__双指针

题目:

编写程序以 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 min=new ListNode(0);
        ListNode minhead=min;
        ListNode max=new ListNode(0);
        ListNode maxhead=max;

        while(head!=null){
            if(head.val<x){
                min.next=head;
                head=head.next;
                min=min.next;
            }else{
                max.next=head;
                head=head.next;
                max=max.next;
            }
        }
        min.next=maxhead.next;
        max.next=null;
        return minhead.next;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章