876 链表中节点
思路:快慢指针;
注意:fast,fast->next皆要检查
struct ListNode* middleNode(struct ListNode* head){
struct ListNode *fast=head ,*slow=head;
while(fast&&fast->next){
fast=fast->next->next;
slow=slow->next;
}
return slow;
}
21 合并两个有序链表
普普通通按规则创建新链表
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
struct ListNode *head=NULL,*end=NULL,*temp1=list1,*temp2=list2;
while(temp1||temp2){
struct ListNode* temp = (struct ListNode*)malloc(sizeof(struct ListNode));
temp->next = NULL;
if(head==NULL){
head=temp;
end=temp;
}else{
end->next=temp;
end=temp;
}
if (temp1 == NULL) {
temp->val = temp2->val;
temp2 = temp2->next;
continue;
}
if (temp2 == NULL) {
temp->val = temp1->val;
temp1 = temp1->next;
continue;
}
if (temp1->val <= temp2->val) {
temp->val = temp1->val;
temp1 = temp1->next;
} else {
temp->val = temp2->val;
temp2 = temp2->next;
}
}
return head;
}
递归
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
if(list1==NULL){
return list2;
}
if(list2==NULL){
return list1;
}
if(list1->val<list2->val){
list1->next=mergeTwoLists(list1->next,list2);
return list1;
}else{
list2->next=mergeTwoLists(list1,list2->next);
return list2;
}
}