東莞智通人才網(wǎng)招聘信息網(wǎng)windows優(yōu)化軟件
分割鏈表
給你一個鏈表的頭節(jié)點?head
?和一個特定值?x
?,請你對鏈表進行分隔,使得所有?小于?x
?的節(jié)點都出現(xiàn)在?大于或等于?x
?的節(jié)點之前。
你不需要?保留?每個分區(qū)中各節(jié)點的初始相對位置。
示例 1:
輸入:head = [1,4,3,2,5,2], x = 3 輸出:[1,2,2,4,3,5]
示例 2:
輸入:head = [2,1], x = 2 輸出:[1,2]
提示:
- 鏈表中節(jié)點的數(shù)目在范圍?
[0, 200]
?內(nèi) -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;}//創(chuàng)建帶頭的大小鏈表ListNode*lessHead,*lessTail,*greaterHead,*greaterTail;//大小鏈表的哨兵衛(wèi)lessHead=lessTail=(ListNode*)malloc(sizeof(ListNode));greaterHead=greaterTail=(ListNode*)malloc(sizeof(ListNode));ListNode*cur=head;//遍歷原鏈表,將結(jié)點放到大小鏈表中while(cur){if(cur->val<x){//放到小鏈表中l(wèi)essTail->next=cur;lessTail=lessTail->next;}else{//放到大鏈表中g(shù)reaterTail->next=cur;greaterTail=greaterTail->next;}cur=cur->next;}if(greaterTail){greaterTail->next=NULL;}//小鏈表的尾和大鏈表的頭(第一個有效結(jié)點)連接起來lessTail->next=greaterHead->next;//把動態(tài)開辟的空間釋放掉free(greaterHead);ListNode*rethead=lessHead->next;free(lessHead);return rethead;
}
?
?
?
理解exit
1、exit的功能為:退出當(dāng)前運行的程序,并將參數(shù)value返回給主調(diào)進程。
2、exit(0),exit(1) 和 exit(-1)的區(qū)別
- exit(0)表示程序正常退出;除了0之外,其他參數(shù)均代表程序異常退出,如:exit(1),exit(-1)。
- exit(1)和exit(-1)是分別返回1和-1到主調(diào)程序。
- exit(0)則是返回0。exit(0)表示程序正常退出,非0表示非正常退出。
3、return與exit的區(qū)別
- ?return是語言級別的,它表示了調(diào)用堆棧的返回;
- 而exit是系統(tǒng)調(diào)用級別的,它表示了一個進程的結(jié)束。
return和exit作用大致相同。
在main中:
return v;? 與? ?exit(v);? 的效果相同。
但是在其它功能函數(shù)中就會有所區(qū)別:
return會跳出函數(shù),而exit會結(jié)束程序。
?即: return是返回函數(shù)調(diào)用,如果返回的是main函數(shù),則為退出程序? ;
? ? ? ? ?exit是在調(diào)用處強行退出程序,運行一次該程序就被強制結(jié)束 。
4、通??梢越柚鷈xit()的返回值判斷程序結(jié)束狀態(tài),
0表示程序正常退出,
其它值是異常退出,
在退出前可以給出一些提示信息,方便在調(diào)試程序時察看出錯原因。
?