第一類
將鍊錶的頭部指向尾部,再指向頭部的第二個,再由頭部的第二個指向尾部的第二個
例子
輸入: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....