合併兩個有序鍊錶 C

2021-06-08 03:35:38 字數 1442 閱讀 6584

合併兩個有序鍊錶

遞迴實現:

①演算法思想:

遞迴終止條件:若head1為空,返回head2指標(head);若head2為空,返回head1指標(head)

遞迴過程:

(1)若head1->data>head2->data;  head 指標應該指向head2所指向的節點,而且head->next應該指向head1和head2->next兩個鍊錶的合成序列的頭指標;

(2)否則head 指標應該指向head1所指向的節點,而且head->next應該指向head->next和head2兩個鍊錶的合成序列的頭指標;

②實現**(c++):

#include using namespace std;

/*節點的類定義*/

class node};

/*鍊錶的類定義*/

class linkedlist

temp->next=null;

}};/*遞迴的合併兩個有序鍊錶*/

node * mergelinkedlist(node * head1,node * head2)

else

return p;

} }

/*列印鍊錶的所有元素*/

void printlist(node * head)}

int main()

; int array2[3]=;

/*構造兩個有序鍊錶--list1和list2*/

linkedlist list1(array1);

linkedlist list2(array2);

/*遞迴的將這兩個有序鍊錶合併成乙個有序鍊錶*/

node * new_head=mergelinkedlist(list1.head,list2.head);

/*列印有序鍊錶*/

printlist(new_head);

return 0;

}

實現memmove函式

#include /*函式功能與memmove相同。*/

void * mymemmove(void * dest,const void * src,size_t count)

return dest;}

void main()

; mymemmove(&src[2],src,4);

/*列印源字串*/

int i;

for(i=0;i<6;i++)

printf("%c",src[i]);

printf("/n");

}

合併兩個有序鍊錶

鍊錶的題目總是讓我很惆悵。動輒就會runtime error。比如這題,額外用了乙個節點的空間來儲存頭節點。我很不情願多用這個空間,不過貌似不行。貌似不行,實際可行,見附錄。把頭節點提出迴圈 實現類 class solution else if l1 null p next l1 if l2 nul...

合併兩個有序鍊錶

三個指標乙個儲存la鍊錶 乙個儲存lb鍊錶,乙個指向新的鍊錶。鍊錶的插入,兩個指標,乙個是head,乙個指向head後面的鏈,新插入的元素位於head後面。執行該 自己外加上class類。static class node public static void main string args st...

合併兩個有序鍊錶

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4思路 很簡單就是二路歸併的思想,時間複雜度o n definition for singly linked list.struct listno...