86.分隔链表
思路1:
链表题目一定要提前想好思路,这个题目就是可以用两个头节点创建两张新的链表。按顺序遍历原链表,小于x的链表值放到一张链表,大于等于链表值得放到另外一张链表。然后合并即可。这样中间的走线才不会紊乱
有的时候就是不知道要建造几个节点,这边统一总结下:
创建了头结点意味着在这里生成新链表,要配备一个查找节点,因为头结点要next,头结点表示当前处理完的节点。
然后如果head没用就不需要生成新的temp节点。所以有头结点,就配备一个temp。就完事了!
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
//顺序不需要变,只需要把比x值小的节点移动到第一个大于等于x的节点的左侧就行
//其实就是弄两张链表,然后合并,注意到虽然说两张链表,元素都是里面的就是分开了变成2
ListNode* small=new ListNode;
ListNode* large=new ListNode;
ListNode* largetop=large;
ListNode* smalltop=small;
while(head){
if(head->val<x){
small->next=head;
small=small->next;
}
else if(head->val>=x){
large->next=head;
large=large->next;
}
head=head->next;
}
large->next=nullptr;
small->next=largetop->next;
return smalltop->next;
}
};