/*————danny的常规方法,注意和回文链表进行区别,这个可以直接用两个现有的链表进行构造,因为原有链表不需要保留;
而前面的回文链表需要保留原来链表进行对比,所以不能像这题这样操作。*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
//(1)如果l1/l2有空的,则直接将另一个链表给返回
if(!l1){
return l2;
}
if(!l2){
return l1;
}
//(2)创建一个头结点并初始化
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL; // 防止脏数据
struct ListNode* s = head; // 使用s进行操作,而不是头结点head
//(3)对以head为头结点的链表进行构造(只是对地址操作,并不是创建大量结点)
while(l1 && l2){
if(l1->val < l2->val){
s->next = l1;
l1 = l1->next;
}
else{
s->next = l2;
l2 = l2->next;
}
s = s->next; // 因为x最开始指向的是头结点,每次将下一个位置安排好后,将t移到新链表的最后一个位置
}
//(4)如果都有数据的区间结束,l1还有元素,则t后面直接接剩余的值
if(l1){
s->next = l1;
}
else if(l2){
s->next = l2;
}
//(5)将构造好的链表的第一个具体结点返回
return head->next;
}
而前面的回文链表需要保留原来链表进行对比,所以不能像这题这样操作。*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
//(1)如果l1/l2有空的,则直接将另一个链表给返回
if(!l1){
return l2;
}
if(!l2){
return l1;
}
//(2)创建一个头结点并初始化
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL; // 防止脏数据
struct ListNode* s = head; // 使用s进行操作,而不是头结点head
//(3)对以head为头结点的链表进行构造(只是对地址操作,并不是创建大量结点)
while(l1 && l2){
if(l1->val < l2->val){
s->next = l1;
l1 = l1->next;
}
else{
s->next = l2;
l2 = l2->next;
}
s = s->next; // 因为x最开始指向的是头结点,每次将下一个位置安排好后,将t移到新链表的最后一个位置
}
//(4)如果都有数据的区间结束,l1还有元素,则t后面直接接剩余的值
if(l1){
s->next = l1;
}
else if(l2){
s->next = l2;
}
//(5)将构造好的链表的第一个具体结点返回
return head->next;
}
全部评论
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享