码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 86 分割链表

时间:2020-04-12 08:08:21      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:lis   ret   cond   list   linked   tno   等于   amp   结束   

地址: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 分割链表

标签:lis   ret   cond   list   linked   tno   等于   amp   结束   

原文地址:https://www.cnblogs.com/c21w/p/12683437.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!