问题描述
给定一个链表和一个值x,将链表中节点值大于等于x的节点移到链表的后半部分,要求链表的两部分需要保持原来的顺序。
解题思路
遍历链表,如果当前链表的值大于x,在新链表中添加该元素,原链表中删除该元素,当遍历完原链表后,在原链表的后面添加新链表即可。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head==null)
return null;
ListNode largeNode=new ListNode(0);//指向大链表的当前元素
ListNode lhead=largeNode;//指向大链表的头部
ListNode smallNode=new ListNode(0);//指向小链表的当前元素
smallNode.next=head;
head=smallNode;//指向小链表的头部
while(smallNode.next!=null){
if(smallNode.next.val<x){
smallNode=smallNode.next;
}else{
largeNode.next=smallNode.next;
largeNode=largeNode.next;
smallNode.next=smallNode.next.next;
largeNode.next=null;
}
}
smallNode.next=lhead.next;
return head.next;
}
}