描述
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
解题思路:
<x尾插到第一个链表
>=x尾插到第二个链表
两个链表链接起来
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
ListNode* partition(ListNode* pHead, int x) {
// write code here
struct ListNode *lessHead,*greaterHead,*greaterTail,*lessTail;
lessHead=lessTail=(struct ListNode *)malloc(sizeof(struct ListNode));
greaterTail=greaterHead=(struct ListNode *)malloc(sizeof(struct ListNode));
lessTail->next=greaterTail->next=NULL;
struct ListNode* cur = pHead;
while(cur)
{
if(cur->val<x)
{
lessTail->next = cur;
lessTail = lessTail->next;
}
else {
greaterTail->next = cur;
greaterTail=greaterTail->next;
}
cur=cur->next;
}
lessTail->next = greaterHead->next;
greaterTail->next = NULL;
pHead=lessHead->next;
free(lessHead);
free(greaterHead);
return pHead;
}
};
给定链表头指针pHead和值x,代码将所有小于x的节点移到前面,保持原有顺序,返回新链表头指针。实现中创建了两个临时链表,分别存储小于x和大于等于x的节点,最后连接这两个链表。

被折叠的 条评论
为什么被折叠?



