您的位置:首页 > 新闻 > 资讯 > 力扣86【分割链表】

力扣86【分割链表】

2025/1/14 18:33:30 来源:https://blog.csdn.net/qq_43954910/article/details/140638279  浏览:    关键词:力扣86【分割链表】

最近在速刷算法题:刷题链接如下点击

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode partition(ListNode head, int x) {// if(head == null) return null;ListNode phead = new ListNode(-1,head), p = phead;ListNode px = null,max_pre = null;//找到第一个大于x的前置节点,若没有就是找到x的前置节点while(p.next != null){if(p.next.val >= x){max_pre = p;break;}p = p.next;}if(max_pre == null) return head;px = max_pre.next;//从此节点后一个节点开始寻找小于它的节点ListNode ppx = px.next,pre = px;while(ppx != null){ListNode q = ppx.next;//保证相对位置,就得在max_pre结点后进行尾插法if(ppx.val < x){max_pre.next = ppx;ppx.next = px;max_pre = max_pre.next;pre.next = q;ppx = q;}else{//若不符合要求,继续后移,同时记录前置节点pre = pre.next;ppx = ppx.next;}}return phead.next;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com