c语言练习94:分割链表

分割链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。

示例 1:

输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2
输出:[1,2]

提示:

  • 链表中节点的数目在范围 [0, 200] 内
  • -100 <= Node.val <= 100
  • -200 <= x <= 200

 

 

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

typedef struct ListNode ListNode;
struct ListNode* partition(struct ListNode* head, int x){
         if(head==NULL){
             return head;
         }
         //创建带头的大小链表
         ListNode*lessHead,*lessTail,*greaterHead,*greaterTail;
         //大小链表的哨兵卫
         lessHead=lessTail=(ListNode*)malloc(sizeof(ListNode));
         greaterHead=greaterTail=(ListNode*)malloc(sizeof(ListNode));
         ListNode*cur=head;
         //遍历原链表,将结点放到大小链表中
         while(cur){
             if(cur->val<x){
                 //放到小链表中
                 lessTail->next=cur;
                 lessTail=lessTail->next;
             }
             else{
                 //放到大链表中
                 greaterTail->next=cur;
                 greaterTail=greaterTail->next;
             }
             cur=cur->next;
         }
         if(greaterTail){
             greaterTail->next=NULL;
         }
         //小链表的尾和大链表的头(第一个有效结点)连接起来
         lessTail->next=greaterHead->next;
         //把动态开辟的空间释放掉
         free(greaterHead);
         ListNode*rethead=lessHead->next;
         free(lessHead);
         return rethead;
}

 

 

 

理解exit

1、exit的功能为:退出当前运行的程序,并将参数value返回给主调进程。

2、exit(0),exit(1) 和 exit(-1)的区别

  • exit(0)表示程序正常退出;除了0之外,其他参数均代表程序异常退出,如:exit(1),exit(-1)。
  • exit(1)和exit(-1)是分别返回1和-1到主调程序。
  • exit(0)则是返回0。exit(0)表示程序正常退出,非0表示非正常退出。

3、return与exit的区别

  •  return是语言级别的,它表示了调用堆栈的返回;
  • 而exit是系统调用级别的,它表示了一个进程的结束。

return和exit作用大致相同。

在main中:

return v;  与   exit(v);  的效果相同。

但是在其它功能函数中就会有所区别:

return会跳出函数,而exit会结束程序。

 即: return是返回函数调用,如果返回的是main函数,则为退出程序  ;

         exit是在调用处强行退出程序,运行一次该程序就被强制结束 。

4、通常可以借助exit()的返回值判断程序结束状态,

0表示程序正常退出,

其它值是异常退出,

在退出前可以给出一些提示信息,方便在调试程序时察看出错原因。

 

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值