除了平平无奇外,就是关于对第一次(无头)特殊情况的处理,理解有无头的方便与否
以下是代码+注释
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
if(list1 == NULL){
return list2;
}
if(list2 == NULL){
return list1;
}
//特殊情况处理完了,现在是一般的对链表的操作
struct ListNode* pNew = NULL;
//本代码使用重新创建一个链表法(迭代法),建议造一个头结点或者把一般情况的第一次赋值搞出来
//(主要是为了,把这第一次的特殊情况扔进循环里)
if(list1->val < list2->val){
pNew = list1;
list1 = list1->next;
//pNew->next =NULL;
//理应写的
}
else{
pNew = list2;
list2 = list2->next;
//pNew->next =NULL;
}
struct ListNode* pReturn = pNew;//记录返回的指针
while(list1 && list2){//谁先排完谁出去(很容易想到,类似于两个人玩斗地主,总有一个人先出完牌)
if(list1->val < list2->val){
pNew->next = list1;
//这里也是就不添了置NULL操作
list1 = list1->next;
pNew = pNew->next;
}
else{
pNew->next = list2;
list2 = list2->next;
pNew = pNew->next;
}
}
if(list1 == NULL){
pNew->next = list2;
}
if(list2 == NULL){
pNew->next = list1;
}
return pReturn;
}