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 分割链表的主要内容,如果未能解决你的问题,请参考以下文章