LEETCODE: Partition List

来源:互联网 发布:slack for mac 编辑:程序博客网 时间:2024/06/16 01:01

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.

For example,
Given 1->4->3->2->5->2 and x = 3,
return 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) {        if(head == NULL || head->next == NULL)  return head;        ListNode *newHead = NULL;        ListNode *smaller = NULL;        ListNode *largehead = NULL;        ListNode *larger = NULL;        while(head != NULL) {            if(head->val < x) {                if(smaller == NULL) {                    smaller = head;                    newHead = head;                }                else {                    smaller->next = head;                    smaller = smaller->next;                }            }            else {                if(larger == NULL) {                    larger = head;                    largehead = head;                }                else {                    larger->next = head;                    larger = larger->next;                }            }            head = head->next;        }                if(larger != NULL) {            larger->next = NULL;        }                if(smaller != NULL) {            smaller->next = largehead;            return newHead;        }                return largehead;    }};

Partition List

 

0 0
原创粉丝点击