题解
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode* small = new ListNode(0);
ListNode* List1 = small;
ListNode* large = new ListNode(0);
ListNode* List2 = large;
while(head != nullptr) {
if(head->val < x){
List1->next = head;
List1 = List1->next;
}else {
List2 -> next = head;
List2 = List2 -> next;
}
head = head -> next;
}
List1 -> next = large -> next;
List2 -> next = nullptr;
return small -> next;
}
};
思路
第一个链表代码,题很简单没什么可说的,就是维护两个链表尾部,把各自满足条件的节点接入链表尾部。需要注意的是,要把尾节点的next设为nullptr,否则就循环了。
链表节点
->和.的区别,->箭头运算符把解引用和成员访问两个操作结合在一起,
it->mem 等价于 (*it).mem。