LeetCode刷题:面试题 02.04. 分割链表

发布时间:2024年01月07日

题目:

是否独立思考解决:否,完全没有思路,在参考解题思路后,仍然没有解决出来,以后刷题过程没有思路可以参考别人的解题思路,但是出现问题一定要多加思考,不能一心想着通过为标准,照着别人的代码抄

解题思路:既然题目要求比目标值小的数要排在前面,比目标值大的数不动,那么直接分为两个链表small与large,遍历head链表之后,比目标值小的值就放在small中,比目标值大的值就放在large中

解题代码:

class Solution {
    public ListNode partition(ListNode head, int x) {
        if(head==null){return null;}
        ListNode smallhead = new ListNode(0);//创建头结点,并保持头结点不动是指向标
           ListNode small = smallhead;//创建节点指向节点方便后续节点的存储与移动
       ListNode largehead = new ListNode(0);
       ListNode large = largehead;
        while(head!= null){
           
            if(head.val<x){//如果链表中的值比目标值小则把,链表的值放入small链表中,并向后移动一位方便存储下一位
                small.next = head;
                small=small.next;
            }else{
                large.next = head;
                large =large.next;
            }
            head = head.next;//链表第一个值存入small或者large后向后遍历
        }
        small.next=largehead.next;//head遍历完后,small与large要拼接起来,记得因为我们large的头结点是我们开始定义的 new ListNode(0);所以我们要指向头结点的下一位
        large.next=null;
        return smallhead.next;       
}
}

文章来源:https://blog.csdn.net/weixin_46139028/article/details/135442834
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。