算法基础~链表~链表划分

时间:2021-07-21
本文章向大家介绍算法基础~链表~链表划分,主要包括算法基础~链表~链表划分使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

算法基础~链表~链表划分

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;
    }
}

原文地址:https://www.cnblogs.com/shan333/p/15037717.html