算法基础~链表~链表划分
1,题意要求:小于x的放在前,大于等于x放后。
2,例如x = 3,原链表图解:
3,如果只在原链表上找出小x的组成“小”链,剩下的就是“大”链,但是,找出小链,不拼接的话,链表是断链状态的,
so,需要找小 组成小链的同时,也需要找大 组成大链,即:
4,一般,循环遍历,咱是一个结点一个结点的遍历,组建拼接,一般遍历结束,头指针的位置都到了链尾的位置,即:
5,于是乎,咱就面临“小链、大链连接成一条链”的困境~~~
~解决:巧用空的头结点~用来标志第一个结点:
7,直接上代码,分析如上:
public class Solution { public: ListNode* partititon(ListNode* head, int x){ ListNode less_head_node(0); ListNode more_head_node(0); ListNode* less_head = &less_head_node; ListNode* more_head = &more_head_node; while(head){ if(head->val < x){ //构建小链 less_head->next = head; less_head = head; }else{ //构建大链 more_head->next = head; more_head = head; } head = head->next; } //小链的尾部连接大链头部 less_head->next = more_head_node.next; more_head->next = NULL; return less_head_node.next; } }
8,补充小知识点【. 与 -> 区别】
. 是结构体变量,引用结构体成员。
-> 是结构体指针变量,引用结构体成员。