美文网首页
Leetcode系列之链表(6)

Leetcode系列之链表(6)

作者: FisherTige_f2ef | 来源:发表于2019-10-28 23:24 被阅读0次

题目

给出一个链表和一个值x,以x为参照将链表划分成两部分,使所有小于x的节点都位于大于或等于x的节点之前。

两个部分之内的节点之间要保持的原始相对顺序。

 例如:

给出1->4->3->2->5->2和x = 3,

返回1->2->2->4->3->5.

思路:

1.直接创建两个链表:一个链表存放小于x的元素,另一个存放大于或等于x的元素

2.然后迭代访问整个链表,将元素插入before或者after链表末尾。一旦抵达链表末端,则表明拆分完毕,最后合并两个链表

代码:

/**

* Definition for singly-linked list.

* public class ListNode {

*    int val;

*    ListNode next;

*    ListNode(int x) {

*        val = x;

*        next = null;

*    }

* }

*/

public class Solution {

    public ListNode partition(ListNode head, int x) {

        ListNode node=head;

        if( node== null){

            return null;

        }

        ListNode beforeStart= null;

        ListNode beforeEnd= null;

        ListNode afterStart= null;

        ListNode afterEnd= null;

        while( node!= null){

            ListNode next= node. next;

            //将链表存储在next中

            node. next= null;

            //将node的next清零表示,只是添加一个节点,而非以该节点为头结点的链表

            if( node.val< x){

                if( beforeStart== null){

                    beforeStart= node;

                    beforeEnd= beforeStart;

                } else{

                    beforeEnd. next= node;

                    beforeEnd= node;

                }

            } else{

                if( afterStart== null){

                    afterStart= node;

                    afterEnd= afterStart;

                } else{

                    afterEnd. next= node;

                    afterEnd= node;

                }

            }

            node= next;            }

        if( beforeStart== null)

            return afterStart;

        //合并

        beforeEnd. next= afterStart;

        return beforeStart;

    }

}

相关文章

  • Leetcode系列之链表(6)

    题目 给出一个链表和一个值x,以x为参照将链表划分成两部分,使所有小于x的节点都位于大于或等于x的节点之前。 两个...

  • Swap Nodes in Pairs

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Swap Nodes in ...

  • Remove Nth Node From End of List

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Remove Nth Nod...

  • Merge k Sorted Lists

    标签: C++ 算法 LeetCode 链表 每日算法——leetcode系列 问题 Merge Two Sort...

  • Leetcode系列之链表(16)

    题目: 有两个大小分别为m和n的有序数组A和B。请找出这两个数组的中位数。你需要给出时间复杂度在O(log (m+...

  • Leetcode系列之链表(14)

    题目: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5...

  • Leetcode系列之链表(15)

    题目: 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是百位数...

  • Leetcode系列之链表(13)

    题目: 合并k个已排序的链表并将其作为一个已排序的链表返回。分析并描述其复杂度。 思路: 典型的多路归并问题 代码...

  • Leetcode系列之链表(9)

    题目: 将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的 思路: 普通的排序问题,难...

  • Leetcode系列之链表(10)

    题目: 将给定的链表向右转动k个位置,k是非负数。 例如: 给定1->2->3->4->5->null , k=2...

网友评论

      本文标题:Leetcode系列之链表(6)

      本文链接:https://www.haomeiwen.com/subject/pxuvvctx.html