件名の説明:
入力されたリンクリスト、リンクリスト出力の逆数k番目のノード。
問題解決のアイデア:最後から二番目のノードk、正(サイズK + 1)の数のノード
公共 ListNode FindKthToTail(ListNodeヘッド、INT K){ 場合(ヘッド== NULL || K <= 0 || K> サイズ(ヘッド)){ 戻り ヌル。 } INT N =サイズ(ヘッド)-k + 1 。 一方、(N> 1 ){ ヘッド = head.next。 N - ; } 戻りヘッド。 } 公共 int型のサイズ(ListNodeヘッド){ int型のカウント= 0 ; しばらく(ヘッド!= nullの){ 数++ ; ヘッド = head.next。 } を返す数えます。 }
2つのアイデアの解決:二つのポインタの使用、kの差が、前回リンクリストへのバックポインタを、最後から二番目のほとんどのk個のノードの前のポインタが(更新されます)
件名の説明:
リストを反転リストを入力した後、出力ヘッダの新しいリスト。
公共ListNode ReverseList(ListNodeヘッド){ 場合(ヘッド== NULL ) 戻り ヌル。 ListNode reversedHead = nullを。 ListNode電流 = ヘッド。 ListNode TMP = nullを。 前ListNode = nullを。 一方、(!電流= NULL ){ TMP = current.next。 current.next = 前; もし(TMP == nullの) reversedHead = 現在; 前 = 現在; 現在 = TMP; } 戻りreversedHead。 }
トピック3:
二つは、単調もちろん、その後私たちは、合成リスト非減少規則を満たすために必要な、二つのリストを合成した後、入力リストおよび出力リストを増やします
二つのリストを横断する、各値は、移動、一つずつ比較されます。加えます
公共ListNodeマージ(ListNodeのList1、LIST2 ListNode){ ListNodeヘッド = NULL ; ListNode TMP = NULL ; ListNode電流 = NULL ; ながら(!のList1 = ヌル!&& LIST2 = NULL ){ IF(list1.val> list2.val){ 電流 = LIST2; LIST2 = current.next; TMP = 現在; tmp.next = NULL ; // クリアノード値の後に挿入 ヘッド= (頭、TMP)を加えます。 } 他{ 電流 = LIST1。 リスト1 = current.next。 TMP = 現在; tmp.next = nullを。 ヘッド = (頭、TMP)を加えます。 } } 一方(LIST1!= NULL ){ 電流 = LIST1。 リスト1 = current.next。 TMP = 現在; tmp.next= NULL ; ヘッド = (頭、TMP)を加えます。 } 一方(LIST2!= NULL ){ 電流 = LIST2。 LIST2 = current.next。 TMP = 現在; tmp.next = nullを。 ヘッド = (頭、TMP)を加えます。 } 戻りヘッド。 } パブリック ListNodeアド(ListNodeヘッド、ListNodeノード){ 場合(ヘッド== NULL ){ ヘッド =ノード; } 他{ ListNode電流 = ヘッド。 一方、(!current.next = NULL ){ 電流 = current.next。 } current.next = ノード。 } 戻りヘッド。 }