网站Logo MsBlog

【力扣】分割链表

pmsa
941
2021-04-21

题目:

编写程序以 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解:

只需要遍历链表的所有节点,小于x的放到一个小的链表中,大于等于x的放到一个大的链表中,最后再把这两个链表串起来即可。

 public ListNode partition(ListNode head, int x) {
	//小的链表的首元节点和头节点
        ListNode small = new ListNode(0);
        ListNode smallHead = small;
	
	//大的链表的首元节点和头节点
        ListNode large = new ListNode(0);
        ListNode larageHead = large;
	
	//遍历head链表
        while(head != null){
	    //判断head链表中值
            if(head.val < x){
		//如果值比x小,则将它放到小的链表
                small.next = head;
                small = small.next; 
            }else{
		//如果值大于等于x,则将它放到大的链表
                large.next = head;
                large = large.next;
            }
	    //继续循环下一个head节点
            head = head.next;
        }
	//将大小两个链表合并
        large.next = null;
        small.next = larageHead.next;
        return smallHead.next;
    }

动物装饰