鍊錶關於鍊錶合併和反轉的兩類題型

2021-10-10 22:42:44 字數 1396 閱讀 1359

第一類

將鍊錶的頭部指向尾部,再指向頭部的第二個,再由頭部的第二個指向尾部的第二個

例子

輸入:1,3,5,7,8,9,0

輸出:1,0,3,8,5,8,7

這裡我的思路是先將將一條表分為兩段從中間截斷,這時候我們將第二條鍊錶反轉,最後將他們有序的合併就可以達成目的

link1* fanzhuan (link1 *p)

return p1;

}void

list_hebing_text

(link1 *p)

pre1-

>next=

null

;//將他分成兩個結點

p_two=

fanzhuan

(p_two)

;//將第二條鍊錶反轉

pre2 =p_two;

pre1 =p_head;

//將兩個鍊錶合併

while(1

)if(pre2 ==

null)}

}

第二類

同樣的還有第二類問題,就是求出鍊錶的的結構是否滿足回文的結構

例子

1,2,3,4,5,4,3,2,1

正確1,3,5,6,7,9,4,2,6

錯誤

這種題的思路和原來一樣,我們也是將他分為兩段,將第二段反轉,然後直接進行比較

link1* fanzhuan (link1 *p)

return p1;

}int

link_same

(link1* head)

len =len/2;

if(len ==0)

return1;

p_one=head;

while

(len !=0)

//反轉

p_two=p_one;

p_one =head;

p_two=

fanzhuan

(p_two)

;while

(tep !=

null

) p_new=p_new-

>next;

}//比較

while

(p_two -

>next !=

null

&& p_one-

>next !=

null

) p_two=p_two -

>next;

p_one=p_one -

>next;

}return1;

}

鍊錶 反轉 合併

關於鍊錶的基礎知識,請參考我的其他文件 在實現以下操作之前,還是首先定義基本資料型別 cpp view plain copy typedef struct node linknode,linklist 1 鍊錶的反轉 基本思想 利用乙個輔助指標 tmp 用於儲存當前指標指向的下乙個結點 然後,反轉當...

反轉合併鍊錶

反轉鍊錶 node reverselist node h return newh 合併 將兩個有序鍊錶合併 迴圈實現 listnode hebing listnode head1,listnode head2 p2結點資料小 將last指向p2結點,last和p2分別後移 else 當有乙個鍊錶結束...

合併兩個排序的鍊錶 反轉鍊錶

合併兩個排序的鍊錶 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。示例1 輸入 1 2 4,1 3 4輸出 1 1 2 3 4 4 public listnode mergetwolists listnode l1,listnode l2 else r r.next r....