题目链接:https://leetcode.com/problems/partition-list/
说明
1:环境 windows10
2:编辑器 IDEA
3:时间:2019-6-15
4:LeetCode 86 题:链表分割
题目要求
给定链表和值x,对其进行分区,使得小于x的所有节点都在大于或等于x的节点之前。
您应该保留两个分区中每个分区中节点的原始相对顺序。
Example:
Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5
解题思路
1:创建两个临时头结点,我这里命名为 less_head 和 more_head,再创建两个节点,less_ptr和more_ptr,分别指向less_head和more_head,用于在链表上移动
2:遍历链表,使用判断条件,如何链表中数据域数值小于x,则把该节点链接到less_head的后面,同理如果大于或等于,则链接到more_head后面
3:就是一些,节点的移动,比如说,(1)原链表的head 要指向head的下一个节点,(2)less_ptr 和 more_ptr指向链接后的节点。
图片解释
代码
public ListNode partition(ListNode head, int x) {
ListNode less_head = new ListNode(0); // 创建一个less_head 节点
ListNode more_head = new ListNode(0); // 创建一个more_head 节点
ListNode less_ptr = less_head; // less_ptr 节点指向 less_head
ListNode more_ptr = more_head; // 同理
while (head != null){// 遍历原链表
if (head.val < x){ // 判断 原链表的值与x值得大小
less_ptr.next = head;//将 节点链接在less_ptr 后面
less_ptr = head;// less_ptr指向链接后的节点
}
else {
more_ptr.next = head;
more_ptr = head;
}
head = head.next; // head向后移动
}
// 将 分段后的连表串联起来
less_ptr.next = more_head.next;
more_ptr.next = null; // 最后一个节点的next至为空
return less_head.next;
}