leetcode链表之分割链表

时间:2022-07-25
本文章向大家介绍leetcode链表之分割链表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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