合併兩個有序鍊錶
遞迴實現:
①演算法思想:
遞迴終止條件:若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...