
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *createlist(); /*裁判实现,细节不表*/
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);
void printlist( struct ListNode *head )
{
struct ListNode *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
struct ListNode *list1, *list2;
list1 = createlist();
list2 = createlist();
list1 = mergelists(list1, list2);
printlist(list1);
return 0;
}
/* 你的代码将被嵌在这里 */
我把自己今天早上写的代码润色了一下。现在的版本如下。
注意,本文写于2021.3.19,万一助教代码查重(不知道会不会有),以为我早上的代码是网上抄的就尴尬了。
发现条件运算符在链表这里超级好用!显得代码超级好看!
struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2)
{
struct ListNode *pstart=NULL,*p=NULL,*k1,*k2;
while(list1&&list2)
{
k1=list1;k2=list2;
if(pstart==NULL)
pstart=p=(list1->data<list2->data)?(list1=list1->next,k1):(list2=list2->next,k2);
else
p=p->next=(list1->data<list2->data)?(list1=list1->next,k1):(list2=list2->next,k2);
}
if(pstart!=NULL)
p->next=(list1==NULL)?list2:list1;
else
pstart=list1==NULL?list2:list1;
return pstart;
}

其实我觉得还应该有个测试点。就是一个list空的,一个list非空。
这篇博客分享了作者润色后的链表拼接代码,强调了条件运算符在处理链表时的高效和代码美化作用。文章还提到可能存在的测试点,包括一个空链表和一个非空链表的拼接情况。
2560

被折叠的 条评论
为什么被折叠?



