题解 | #合并两群能量值#
合并两群能量值
https://www.nowcoder.com/practice/d728938f66ac44b5923d4f2e185667ec
考察知识点:链表
题目分析:通过判断两个链表的值,依次按照两个链表当前的值的大小赋值,将两个链表重新组成新的链表,并输出新的链表
采用的编程语言:C
完整的编码代码:如下所示
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
#include <time.h>
struct ListNode* mergeEnergyValues(struct ListNode* l1, struct ListNode* l2 ) {
struct ListNode *tmp_head1 = l1, *tmp_head2 = l2;
struct ListNode* tmp = NULL, *ret_head = NULL;
while (1) {
if (tmp_head1 == NULL || tmp_head2 == NULL) { // 但有某条链表遍历结束,就可以结束循环了
if (tmp != NULL) {
if (tmp_head1 == NULL) // 当时l1链表遍历结束了,就表明l2链表可能还有成员,可以直接把l2没有遍历完的成员拼接给新的链表
tmp->next = tmp_head2;
else // 一样的,将l1的成员拼接给新的链表
tmp->next = tmp_head1;
} else {
if (tmp_head1 == NULL) // 如果新的链表没有初始化,就表明输入的链表中有空链表
ret_head = tmp_head2; // 如果l1链表是空链表的话,输出的链表就可以直接是l2
else
ret_head = tmp_head1; // l2链表为空时,直接输出l1链表
}
break;
}
if (tmp_head1->val > tmp_head2->val) { // 如果当前成员1比成员2大时,就将成员1的值赋值给新链表
if (tmp == NULL) { // 如果新链表没有初始化,就给新连进行初始化
tmp = tmp_head1;
ret_head = tmp_head1; // 标记新链表的链表头
} else {
tmp->next = tmp_head1; // 新链表已经初始化了,那就把当前的值赋值给tmp的next指针
tmp = tmp->next; // 更新新链表的当前值
}
tmp_head1 = tmp_head1->next; // 更新链表1的当前值
} else {
if (tmp == NULL) {
tmp = tmp_head2;
ret_head = tmp_head2;
} else {
tmp->next = tmp_head2;
tmp = tmp->next;
}
tmp_head2 = tmp_head2->next;
}
}
return ret_head;
}
面试高频TOP202解析 文章被收录于专栏
采用Java,C,Python等方法去解答面试高频TOP202题目,
