96 链表划分

链表划分

问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。  你应该保留两部分内链表节点原有的相对顺序。   如给定链表 1->4->3->2->5->2->NULL,并且 x=3  返回 1->2->2->4->3->5->NULL。

解题思路:创建两个新链表,分别设为1,2;遍历给定链表,比较每个结点与给定值X值的大小,若比X小,则放入新链表1中,否则放入新链表2中。遍历完毕后,将新链表1 的最后一个结点指向新链表2的第一个结点,来达到将两个链表串起来从来实现划分链表的目的。

实现代码:

/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */


class Solution {
public:
    /*
     * @param head: The first node of linked list
     * @param x: An integer
     * @return: A ListNode
     */
    ListNode * partition(ListNode * head, int x) {
        // write your code here
        if(head==NULL)
        return NULL;//判断链表是否为空
        ListNode *head1=new ListNode(0);//创建一个头结点为head1的新链表
        ListNode *head2=new ListNode(0);//创建一个头结点为head2的新链表
        ListNode *pre1=head1;//保存头结点到pre1
        ListNode *pre2=head2;//保存头结点到pre2
         while(head!=NULL)
        {
            if(head->val<x)
         { 
        head1->next=head;
        head1=head;
        }
         else    
        {  head2->next=head;
           head2=head;
         }
         head=head->next;
    }
      head2->next=NULL;
      head1->next=pre2->next;//将head1尾结点与head2第一个结点相连
    return pre1->next;//返回head1的第一个结点
  }
};




     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值