leetcode 86 分割链表

Posted 小白进修

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 86 分割链表相关的知识,希望对你有一定的参考价值。

地址:https://leetcode-cn.com/problems/partition-list/
大意:给定一个链表和x,将数值小于x的节点放到左边,其他放右边,保留两个分区中每个节点的初始相对位置

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        if(head == NULL)
            return head;
        ListNode *hh = new ListNode(0);
        hh->next = head;
        ListNode *oneNode = hh;
        ListNode *twoNode = hh;
        while(twoNode->next != NULL && oneNode->next != NULL){
            /*找到一个大于等于x值的节点*/
            while(oneNode->next != NULL){
                if(oneNode->next->val < x){
                    oneNode = oneNode->next;
                }else{
                    break;
                }
            }
            /*从该节点的后面寻找小于x值的节点,如果没有找到就结束*/
            twoNode = oneNode->next;
            if(twoNode != NULL){
                while(twoNode->next != NULL){
                    if(twoNode->next->val >= x){
                        twoNode = twoNode->next;
                    }else{
                        break;
                    }
                }

                if(twoNode->next != NULL && oneNode->next != NULL){
                
                    ListNode *firstNode = oneNode->next;
                    ListNode *secondNode = twoNode->next;

                    twoNode->next = twoNode->next->next;
                    oneNode->next = secondNode;
                    secondNode->next = firstNode;
                }
            }else
                break;
        }
        return hh->next;
    }
};

以上是关于leetcode 86 分割链表的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-86-分割链表

LeetCode86. 分隔链表

LeetCode- 86 -分隔链表 - Java - 细喔

leetcode 链表的合并和分割两道题

p86 求2个链表之和(leetcode 2)

链表--分隔链表(leetcode86