本文主要是介绍【程序员金典】链表分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
/*
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 hereListNode* beforehead=nullptr;ListNode* beforenode=nullptr;ListNode* afterhead=nullptr;ListNode* afternode=nullptr;while(pHead!=nullptr){ListNode* next=pHead->next;pHead->next=nullptr;if(pHead->val<x){if(beforehead==nullptr){beforehead=pHead;beforenode=beforehead;}else{beforenode->next=pHead;beforenode=beforenode->next;}}else{if(afterhead==nullptr){afterhead=pHead;afternode=afterhead;}else{afternode->next=pHead;afternode=afternode->next;}}pHead=next;}if(beforehead==nullptr)return afterhead;if(afterhead==nullptr)return beforehead;beforenode->next=afterhead;return beforehead;}
};
这篇关于【程序员金典】链表分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!