题目描述:给出一个长度为 nn 的单链表和一个值 xx ,单链表的每一个值为 list[i]list[i],请返回一个链表的头结点,要求新链表中小于 x 的节点全部在大于等于 x 的节点左侧,并且两个部分之内的节点之间与原来的链表要保持相对顺序不变。
示例1
输入:{1,4,3,2,5,2},3
返回值:{1,2,2,4,3,5}
思路:直接遍历单链表两次,第一次将小于x的节点取出来放到新的单链表中,第二次遍历将大于等于x的节点取出来添加到新单链表后即可。具体代码如下:
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param x int整型
* @return ListNode类
*/
ListNode* partition(ListNode* head, int x) {
// write code here
ListNode *res = (ListNode *)malloc(sizeof(ListNode)),*p=res,*q = head;
while(q != NULL)
{
if(q->val < x)
{
ListNode *r = (ListNode *)malloc(sizeof(ListNode));
r->val = q->val;
r->next = NULL;
p->next = r;
p = p->next;
}
q = q->next;
}
q = head;
while(q != NULL)
{
if(q->val >= x)
{
ListNode *r = (ListNode *)malloc(sizeof(ListNode));
r->val = q->val;
r->next = NULL;
p->next = r;
p = p->next;
}
q = q->next;
}
return res->next;
}
};


京公网安备 11010502036488号