问题:
给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。
你应该保留两部分内链表节点原有的相对顺序。
样例:
样例 1:
输入: list = null, x = 0 输出: null 样例解释: 空链表本身满足要求
样例 2:
输入: list = 1->4->3->2->5->2->null, x = 3 输出: 1->2->2->4->3->5->null 样例解释: 要保持原有的相对顺序。
python:
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param head: The first node of linked list
@param x: An integer
@return: A ListNode
"""
def partition(self, head, x):
# write your code here
if head == None:
return None
litteList = ListNode(0)
largeList = ListNode(0)
litteNode = litteList
largeNode = largeList
while head != None:
if head.val < x:
litteNode.next = head
litteNode = litteNode.next
else:
largeNode.next = head
largeNode = largeNode.next
head = head.next
litteNode.next = largeList.next
largeNode.next = None
return litteList.next
C++:
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list
* @param x: An integer
* @return: A ListNode
*/
ListNode * partition(ListNode * head, int x) {
// write your code here
if(head==NULL)
{
return NULL;
}
ListNode *litteList=new ListNode(0);
ListNode *largeList=new ListNode(0);
ListNode *litteNode = litteList;
ListNode *largeNode = largeList;
while(head!=NULL)
{
if(head->val < x)
{
litteNode->next = head;
litteNode = litteNode->next;
}
else
{
largeNode->next = head;
largeNode = largeNode->next;
}
head = head->next;
}
largeNode->next = NULL;
litteNode->next = largeList->next;
return litteList->next;
}
};