6 4 鍊錶的拼接

2021-08-27 09:02:32 字數 1899 閱讀 7663

6-4 鍊錶拼接(20 分)

本題要求實現乙個合併兩個有序鍊錶的簡單函式。鍊錶結點定義如下:

struct listnode ;
struct listnode *mergelists(struct listnode *list1, struct listnode *list2);
其中list1list2是使用者傳入的兩個按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 ...