6-4 鍊錶拼接(20 分)
本題要求實現乙個合併兩個有序鍊錶的簡單函式。鍊錶結點定義如下:
struct listnode ;
struct listnode *mergelists(struct listnode *list1, struct listnode *list2);
其中list1
和list2
是使用者傳入的兩個按data
公升序鏈結的鍊錶的頭指標;函式mergelists
將兩個鍊錶合併成乙個按data
公升序鏈結的鍊錶,並返回結果鍊錶的頭指標。
#include #include struct listnode ;
struct listnode *createlist(); /*裁判實現,細節不表*/
struct listnode *mergelists(struct listnode *list1, struct listnode *list2);
void printlist( struct listnode *head )
printf("\n");
}int main()
/* 你的**將被嵌在這裡 */
1 3 5 7 -1
2 4 6 -1
1 2 3 4 5 6 7
答案
struct listnode *mergelists(struct listnode *list1, struct listnode *list2)
//printf("長度為%d\n",len1);
poi2=list2;
int len2=0;
while(poi2!=null)
//printf("長度為%d\n",len2);
int nums[len1+len2];
poi1=list1;
int i=0;
while(poi1!=null)
poi2=list2;
while(poi2!=null)
int len=len1+len2;
if(len==0)
return null;
int ii;
int iii;
for(ii=len-1;ii>=0;ii--)}}
struct listnode *head=null;
struct listnode *tail=null;
struct listnode *poi;
head=(struct listnode *)malloc(sizeof(struct listnode));
// printf("長度為%d\n",len);
if(len>=1)
}return head;
};
這種方法是最為直觀的一種。運用到了position指標。(為了保持head不變)。
另一種建立鍊錶的方法:
struct listnode *newlist = null;
struct listnode *endlist = null;
struct listnode *q;
for(i = 0; i < num; i++)
if(endlist != null)
endlist = q;
endlist->next = null;
}return newlist;
注意,乙個指標每開闢一次空間就換乙個位置。
同時,乙個指標同時只能指向乙個位置。
畫圖虛線為指標,時限為下乙個
6 4 鍊錶拼接 20分
正確作答出這個程式前,發現測試點老是段錯誤或者執行超時,心態 然後準備csdn上面copy一手,誰都不愛。結果發現自己能力有限,沒法短時間消化其他大佬的 於是搞出了自認為較為通俗易懂的 當然,本篇的通過 或許有進步空間,還請各位讀者不吝賜教 本題要求實現乙個合併兩個有序鍊錶的簡單函式。鍊錶結點定義如...
資料結構 鍊錶拼接
6 1 鍊錶拼接 15 分 時間限制 400 ms 記憶體限制 64 mb 長度限制 16 kb 本題要求實現乙個合併兩個有序鍊錶的簡單函式。鍊錶結點定義如下 struct listnode struct listnode mergelists struct listnode list1,struc...
6 25 鍊錶拼接 20 分
原題鏈結 題目的大意是給定兩個公升序單鏈表,合併成要給鍊錶,合併後仍然公升序,題目要求實現的是mergelist 函式。資料結構中講歸併排序的鍊錶實現時,其中的乙個步驟就是合併鍊錶。include include struct listnode struct listnode createlist ...