码迷,mamicode.com
首页 > 其他好文 > 详细

链表的分化练习题

时间:2016-08-23 23:21:41      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

题目:

对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。

给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。

测试样例:
{1,4,2,5},3
{1,2,4,5}

 

 

class Divide {
public:
    ListNode* listDivide(ListNode* head, int val) {
// write code here
    ListNode *lhead=new ListNode(-1);   //按原链表顺序遍历   并将小于等于val值 存在lhead为结点的新链表
    ListNode *rhead=new ListNode(-1);  //                             将大于val值 存在rhead为结点的新链表
    auto p=head;
    auto left=lhead;
    auto right=rhead;

    //以下是遍历&分类的过程
    while(p!=NULL){
       if(p->val<=val){
         left->next=p;
         left=p;
       } 
       else{
         right->next=p;
         right=p;
       }
       p=p->next;
   }


   left->next=NULL;     //新链表的尾部->NULL
   right->next=NULL;

   /*如果lhead链表没有值插入 我们就返回rhead

   /  如果有那么就返回lhead 

   */

   if(lhead->next==NULL){
      rhead=rhead->next;
      return rhead;
   }
   else{
     lhead=lhead->next;
     rhead=rhead->next;
     left->next=rhead;
     return lhead;
   }


   }
};

链表的分化练习题

标签:

原文地址:http://www.cnblogs.com/xuan92/p/5801100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!