题解 | #链表分割#
链表分割
https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70
/* 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// write code here //创建非空的大,小链表 ListNode*lesshead,*lesstail; lesshead=lesstail=(ListNode*)malloc(sizeof(ListNode)); ListNode*greaterhead,*greatertail; greaterhead=greatertail=(ListNode*)malloc(sizeof(ListNode)); ListNode*pcur=pHead; //遍历当前链表 while(pcur) { if((pcur->val)<x) { lesstail->next=pcur; lesstail=lesstail->next; } else { greatertail->next=pcur; greatertail=greatertail->next; } pcur=pcur->next; } //避免成为环形链表 greatertail->next=NULL; //大小链表相连接 lesstail->next=greaterhead->next; ListNode*ret=lesshead->next; free(lesshead); free(greaterhead); lesshead=greaterhead=NULL; return ret; } };