86. Partition List

来源:互联网 发布:2017网络作家排行榜 编辑:程序博客网 时间:2024/06/03 12:43

这道题要求我们划分链表,把所有小于给定值的节点都移到前面,大于该值的节点顺序不变。

设定三个指针,pre,cur和tmp。首先把所有小于x的值跳过去,再遇到新的小于x的数就从这个位置连接。pre首先指向1。然后令cur指向pre,就从pre这里开始往后找。遇到next大于等于x的跳过,那么cur指的就是3,tmp指向2暂停,这时候要把2节点接到pre后面。然后cur再继续往后遍历。

/** * 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* newhead = new ListNode(-1);        newhead->next = head;        ListNode *pre = newhead;        while(pre->next && pre->next->val < x)  pre = pre->next;        ListNode *cur = pre;        while(cur->next){            if(cur->next->val < x){                ListNode* tmp = cur->next;                cur->next = tmp->next;                tmp->next = pre->next;                pre->next = tmp;                pre = pre->next;            }else{                cur = cur->next;            }        }        return newhead->next;    }};


原创粉丝点击