[힘줄 c 언어 실현] 21.두 개의 질서정연한 체인 테이블 병합
9225 단어 스냅 알고리즘 연습
21. 두 개의 질서정연한 체인 테이블을 합친다
1. 제목 설명
두 개의 질서 체인 테이블을 하나의 새로운 질서 체인 테이블로 합쳐서 되돌려줍니다.새 체인 시계는 두 개의 체인 시계의 모든 노드를 연결하여 구성된 것이다.
예:
입력: 1->2->4, 1->3->4 출력: 1->1->2->3->4->4
2. 코드는 다음과 같다. //2018-11-17-20:22
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
// : ,
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
typedef struct ListNode list;
list *p1 = l1;
list *p2 = l2;
int size = 0;
if(p1==NULL)// p1、p2 null
{
return p2;
}
if(p2==NULL)
{
return p1;
}
while(p1->next!=NULL)
{
p1 = p1->next;
}// p1 l1
p1->next = p2;//
p1 = l1;//p1
while(p1!=NULL)
{
size++;
p1 = p1->next;
}
p1 = l1;
int *arrary = malloc(sizeof(int)*size);
memset(arrary,0,sizeof(int)*size);
for(int i = 0;i<size;i++)
{
arrary[i] = p1->val;
p1 = p1->next;
}//
//
for(int i = 0;i<size;i++)
{
for(int j = i +1;j<size;j++)
{
if(arrary[i]>arrary[j])
{
int temp = arrary[i];
arrary[i] = arrary[j];
arrary[j] = temp;
}
}
}
p1 = l1;
int i = 0;
while(p1!=NULL&&i<size)
{
p1->val = arrary[i++];
p1 = p1->next;
}
return l1;
}
```c
//2018-11-17-20:22
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
// : ,
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
typedef struct ListNode list;
list *p1 = l1;
list *p2 = l2;
int size = 0;
if(p1==NULL)// p1、p2 null
{
return p2;
}
if(p2==NULL)
{
return p1;
}
while(p1->next!=NULL)
{
p1 = p1->next;
}// p1 l1
p1->next = p2;//
p1 = l1;//p1
while(p1!=NULL)
{
size++;
p1 = p1->next;
}
p1 = l1;
int *arrary = malloc(sizeof(int)*size);
memset(arrary,0,sizeof(int)*size);
for(int i = 0;i<size;i++)
{
arrary[i] = p1->val;
p1 = p1->next;
}//
//
for(int i = 0;i<size;i++)
{
for(int j = i +1;j<size;j++)
{
if(arrary[i]>arrary[j])
{
int temp = arrary[i];
arrary[i] = arrary[j];
arrary[j] = temp;
}
}
}
p1 = l1;
int i = 0;
while(p1!=NULL&&i<size)
{
p1->val = arrary[i++];
p1 = p1->next;
}
return l1;
}
```c