init commit
This commit is contained in:
102
archive/algorithm/leetcode/21.c
Normal file
102
archive/algorithm/leetcode/21.c
Normal file
@ -0,0 +1,102 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct ListNode
|
||||
{
|
||||
int val;
|
||||
struct ListNode *next;
|
||||
};
|
||||
|
||||
struct ListNode *mergeTwoLists(struct ListNode *l1, struct ListNode *l2)
|
||||
{
|
||||
if (l1 == NULL)
|
||||
{
|
||||
return l2;
|
||||
}
|
||||
if (l2 == NULL)
|
||||
{
|
||||
return l1;
|
||||
}
|
||||
struct ListNode *node = l1, *node2 = l2, *prev = node;
|
||||
while (node != NULL)
|
||||
{
|
||||
if (node2 != NULL && node->val > node2->val)
|
||||
{
|
||||
//第一个链表的值大于第二个链表的值,合并链表直到node2大于node1
|
||||
if (prev == node)
|
||||
{
|
||||
//首节点
|
||||
l1 = node2;
|
||||
while (node2 != NULL && node2->val <= node->val)
|
||||
{
|
||||
prev = node2;
|
||||
node2 = node2->next;
|
||||
}
|
||||
prev->next = node;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (node2 != NULL && node2->val <= node->val)
|
||||
{
|
||||
prev->next = node2;
|
||||
prev = node2;
|
||||
node2 = node2->next;
|
||||
}
|
||||
|
||||
prev->next = node;
|
||||
}
|
||||
}
|
||||
prev = node;
|
||||
node = node->next;
|
||||
}
|
||||
if (node2 != NULL)
|
||||
{
|
||||
prev->next = node2;
|
||||
}
|
||||
return l1;
|
||||
}
|
||||
/*
|
||||
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
|
||||
{
|
||||
struct ListNode *previous = NULL;
|
||||
struct ListNode *t2 = l2;
|
||||
struct ListNode *head = l1;
|
||||
|
||||
while (t2)
|
||||
{
|
||||
if (!l1 || (l1->val > t2->val))
|
||||
{
|
||||
l2 = l2->next;
|
||||
t2->next = l1;
|
||||
|
||||
if (previous)
|
||||
{
|
||||
previous->next = t2;
|
||||
}
|
||||
else
|
||||
{
|
||||
head = t2;
|
||||
}
|
||||
|
||||
t2 = l2;
|
||||
l1 = head;
|
||||
}
|
||||
|
||||
previous = l1;
|
||||
l1 = l1->next;
|
||||
}
|
||||
|
||||
return head;
|
||||
}
|
||||
*/
|
||||
|
||||
int main()
|
||||
{
|
||||
struct ListNode *node1 = malloc(sizeof(struct ListNode)), *node2 = malloc(sizeof(struct ListNode));
|
||||
node1->val = 1;
|
||||
node1->next = NULL;
|
||||
node2->val = 3;
|
||||
node2->next = NULL;
|
||||
mergeTwoLists(node1, node2);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user