题目:给定一个链表和一个值x,划分链表使得所有小于x的节点出现在所有大于等于x的节点之前,并且保持这些节点的相对顺序不变。
例子:1->4->3->2->5->2 x = 3,则应该返回 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)
{
//左节点用来链接所有小于x的节点
ListNode left = ListNode(0);