问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。
样例:
给定链表 1->4->3->2->5->2->null,并且 x=3
返回 1->2->2->4->3->5->null
解题思路:定义两个链表,若系统链表指针所指元素小于目的值,那么将他添加到第一个链表中,若这个值大于或等于目的值那么将他添加到第二个链表中,然后进行循环,知道系统链表指针为NULL,最后将两个链表插起来。
实验代码:
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
ListNode *qian,*hou,*p,*q,*k;
qian=new ListNode;
hou=new ListNode;
p=qian;
q=hou;
if(head==NULL)
return NULL;
while(head!=NULL)
{
if(head->val<x)
{
ListNode *o;
o=new ListNode(head->val);
qian->next=o;
qian=o;
}
if(head->val>=x)
{
ListNode *o;
o=new ListNode(head->val);
hou->next=o;
hou=o;
}
head=head->next;
}
//hou->next=NULL;
qian->next=q->next;
return p->next;
};
个人感想:将两个链表连起来需要注意。