序
本文次要记录一下leetcode链表之宰割链表
题目
编写程序以 x 为基准宰割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中蕴含 x,x 只需呈现在小于 x 的元素之后(如下所示)。宰割元素 x 只需处于“右半局部”即可,其不须要被置于左右两局部之间。示例:输出: head = 3->5->8->5->10->2->1, x = 5输入: 3->1->2->10->5->5->8起源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-list-lcci著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。
题解
/** * 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 cursor = head; ListNode previous = head; int tmp; while (cursor != null) { if (cursor.val < x) { tmp = cursor.val; cursor.val = previous.val; previous.val = tmp; previous = previous.next; } cursor = cursor.next; } return head; }}
小结
这里循环遍历链表,须要应用cursor及previous两个指针,它们开始都指向head,而后判断以后节点的值是否小于x,是的话则以后节点与前一个节点的值进行替换,而后同时更新previous指针及cursor指针。
doc
- 宰割链表