本文次要记录一下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

  • 宰割链表