Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용하여 두 개의 정렬된 연결 목록을 병합합니다.

<시간/>

문제 설명

2개의 정렬된 단일 연결 목록이 제공됩니다. 두 개의 정렬된 연결 리스트를 병합하는 함수 작성

목록1:10->15->17->20목록2:5->9->13->19결과:5->9->10->13->15->17->19->20 

알고리즘

1. 두 목록 모두 순회 1.1. list1->data data인 경우 1.1.1 새 목록에 list1->data를 추가하고 list1 포인터를 증가시킵니다. 1.2 list2->data data인 경우 1.2.1 새 목록에 list2->data를 추가하고 list2를 증가시킵니다. 포인터2. 두 목록이 모두 소진될 때까지 절차를 반복합니다3. 결과 목록 반환

예시

#include #include #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) using namespace std;struct node { int data; 구조체 노드 *next;};노드 *createList(int *arr, int n){ 노드 *head, *p; p =헤드 =새 노드; 헤드->데이터 =arr[0]; 헤드->다음 =NULL; for (int i =1; i next =새 노드; p =p->다음; p->데이터 =arr[i]; p->다음 =NULL; }리턴 헤드;} 무효 displayList(노드 * 헤드){ while (헤드 !=NULL) { cout <<헤드->데이터 <<" "; 머리 =머리 -> 다음; } cout <데이터 <헤드2->데이터) { 결과 =헤드1; 결과->다음 =mergeSortedLists(head1->다음, head2); } else { 결과 =head2; 결과->다음 =mergeSortedLists(head1, head2->다음); } 반환 결과;}int main(){ int arr1[] ={10, 15, 17, 20}; 정수 arr2[] ={5, 9, 13, 19}; 노드 *head1, *head2, *결과 =NULL; head1 =createList(arr1, SIZE(arr1)); head2 =createList(arr2, SIZE(arr1)); cout <<"첫 번째 정렬 목록:" < 

출력

위의 프로그램을 컴파일하고 실행할 때. 다음 출력을 생성합니다 -

첫 번째 정렬 목록:10 15 17 20두 번째 정렬 목록:5 9 13 19최종 정렬 목록:5 9 10 13 15 17 19 20