1.题目:
Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.
You should preserve the original relative order of the nodes in each of the two partitions.
For example, Given1->4->3->2->5->2and x = 3, return1->2->2->4->3->5.
2.思路,这个题目之前看过,直接申请两个指针,如果list里面的val小于x的直接放入p1,大于等于x的放入p2;然后直接让p1的next指向p2;
注意其中指针的变化即可;
一般定义了一个新的结点,都会新定义一个参数i去遍历的作用;固定一个参数指向其头结点、
3.代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode partition(ListNode head, int x) { ListNode p1 = new ListNode(0); ListNode pre1 = p1; ListNode p2 = new ListNode(0); ListNode pre2 = p2; while(head != null){ if(head.val < x){ pre1.next = head; pre1 = pre1.next; }else{ pre2.next = head; pre2 = pre2.next; } head = head.next; } pre1.next = p2.next; pre2.next = null;//注意这里要置空 return p1.next; } }