Leetcode之Partition List

题目:

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.

Example:

Input: head = 1->4->3->2->5->2, x = 3
Output: 1->2->2->4->3->5

代码:

/**
 * 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) {
        	ListNode* first = new ListNode(0);
	ListNode* last = first, *p = head;
	first->next = head; bool has = false;
	while (head) {
		if (head->val >= x) {
			p = head;
			head = head->next;
			
			has = true;
		}
		else {
			if (has) {
				p->next = head->next;
				head->next = last->next;
				last->next = head;
				head = p->next;
				last = last->next;
			}
			else {
				p = head;
				head = head->next;
				last = last->next;
			}
		}
	}
	return first->next;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_35455503/article/details/89854894