链表的分割——哨兵位

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

思路,把链表分成两个新链表,然后连接起来
在这里插入图片描述
代码:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        if(pHead==NULL)
        {
            return pHead;
        }
         ListNode* ghead=NULL;
         ListNode* gtail=NULL;
         ListNode* lhead=NULL;
         ListNode* ltail=NULL;
         ListNode* cur=pHead;
         while(cur)
         {
            if(cur->val<x)
            {
                if(ltail==NULL)
                {
                    lhead=ltail=cur;
                }else 
                {
                    ltail->next=cur;
                    ltail=ltail->next;
                }
                cur=cur->next;
            }else
            {
               if(gtail==NULL)
               {
                ghead=gtail=cur;
               } else{
                gtail->next=cur;
                gtail=gtail->next;
               }
               cur=cur->next;
            }
         }
         if(gtail)//储存大的那个那个链表如果不是空,那么就要把最后一个节点的next置空
         {
         gtail->next=NULL;

         }
          else//如果gtail是空的话,那么就全都是小的数在lhead里,直接返回那么链表就行
         {
            return pHead;
         }
         if(lhead)
         {
            ltail->next=ghead;
             return lhead;
         }else {
         return lhead;
         }
        
         
        
        
    }
};

判断头的代码过于繁琐,那么就利用链表的标兵:
在这里插入图片描述
代码:文章来源地址https://uudwc.com/A/MxRE3

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        if(pHead==NULL)
        {
            return pHead;
        }
         ListNode* ghead=NULL;
         ListNode* gtail=NULL;
         ghead=gtail=(struct ListNode*)malloc(sizeof(struct ListNode));
         ListNode* lhead=NULL;
         ListNode* ltail=NULL;
         lhead=ltail=(struct ListNode*)malloc(sizeof(struct ListNode));

         ListNode* cur=pHead;
         while(cur)
         {
            if(cur->val<x)
            {
               
                    ltail->next=cur;
                    ltail=ltail->next;
                
                
            }else
            {
               
                gtail->next=cur;
                gtail=gtail->next;
               
            }
               cur=cur->next;

         }
         
         gtail->next=NULL;

         
          ltail->next=ghead->next;
          struct ListNode* per=lhead->next;
          free(lhead);
          free(ghead);

         return per;
         
        
         
        
        
    }
};

原文地址:https://blog.csdn.net/qq2127189274/article/details/133139859

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年09月25日 09:13
下一篇 2023年09月25日 09:13