【数据结构---7】以给定值x为基准将链表分割成两部分

博客围绕以给定值 x 分割链表展开。先提出题目,即编写代码将链表分割,使小于 x 的结点在前。接着给出思路,创建两个结果链表分别保存不同大小节点,遍历原链表插入对应链表,最后合并。还提醒注意极端情况,最后提及代码实现。

题目描述:

编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ,请返回重新排列后的链表的头指针

注意:分割以后保持原来的数据顺序不变

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/

思路分析:

1.创建两个结果链表,分为1和2,一个用来保存小于基准值的节点,另一个用来保存大于基准值的节点
2.对原先的链表进行遍历,如果比基准值小,用尾插的方法插入第一个结果链表,反之,插入第二个
3.插入完毕之后进行两个链表的合并,将第一个链表的最后一个节点的next指向第二个链表
4.注意极端情况:
1.保存大于基准值的链表的最后一个节点不一定指向空,所以最后我们记得处理!!
2.有可能给出的基准值比其中一整条链表保存的数都大,所以这时直接返回另一条链表

代码实现:

class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) 
    {
    
         ListNode* result1 = NULL; 
         ListNode* last1 = NULL;
         ListNode* last2 = NULL;
         ListNode* result2 = NULL;
         ListNode* pCur = pHead;
         
	 while (pCur != NULL)
	 {
		  if (pCur->val < x)
		  {
			   if (result1 == NULL)
			   {
				    result1 = last1 = pCur;
			   }
			   else
			   {
				    last1->next = pCur;
				    last1 = pCur;
			   }
		  }
		  else
		  {
			   if (result2 == NULL)
			   {
				    result2 = last2 = pCur;
			   }
			   else
			   {
				    last2->next = pCur;
				    last2 = pCur;
			   }
		  }
	          pCur=pCur->next;
	 }
	 if(last1!=NULL)
         {
            last1->next = result2;
         }
         if (last2 != NULL)
         {
	    last2->next = NULL;
         }
         if(last1!=NULL)
         {
            return result1;
         }
         else
         {
            return result2;
         }
    }
};
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值