题解 | #划分链表#

划分链表

http://www.nowcoder.com/practice/1dc1036be38f45f19000e48abe00b12f

import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @param x int整型 
     * @return ListNode类
     */
    public ListNode partition (ListNode head, int x) {
        //这道题其实就是分为两个单独的链表,一个大于等于x的链表,一个小于等于x的链表,然后再合并
        // write code here
        ListNode smallHead = new ListNode(0);
        ListNode small = smallHead;
        ListNode largeHead = new ListNode(0);
        ListNode large = largeHead;
        while(head!=null){
            if(head.val<x){
                small.next = new ListNode(head.val);
                small = small.next;
            }else{
                large.next = new ListNode(head.val);
                large = large.next;
            }
            head = head.next;
        }
        //这里是合并的逻辑,先将large链表最后一个节点的下一个节点置空,然后再将小链表的下一个节点设置为大节点的头节点的下一个节点,然后返回小链表的头节点
        large.next = null;
        small.next = largeHead.next;
        return smallHead.next;
    }
}
全部评论

相关推荐

码农索隆:我头回见校招简历把个人优势写在最前面的,是我老了吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务