輸入:A->B->C->D->E->NULL ?輸出:E->D->C->B->A->NULL
第一種使用while循環(huán)遍歷直到最后一個節(jié)點(diǎn)
先貼出代碼實(shí)現(xiàn):
總結(jié)的思路:1 用一個對象(temp)保存下一個節(jié)點(diǎn)坟桅,以免丟失這個對象校赤。
????????????2.把當(dāng)前對象的下一個指向一個新的對象(pre)
? ? ? ? ? ? 3.新的這個對象(pre) 賦值為當(dāng)前的對象
????????????4.把當(dāng)前對象賦值為下一個對象桨踪,也是的步驟1保存的對象 籍滴。
? ? ? ? ? ? 5.循環(huán)以上步驟
詳細(xì)的解析:
首先創(chuàng)建一個空的對象pre 受楼。ListNode pre = null;
創(chuàng)建一個對象并賦值為要反轉(zhuǎn)對象转唉。ListNode cur = head;
創(chuàng)建一個while循環(huán),條件是cur 不為空
第一次循環(huán):
? ? 1.創(chuàng)建一個臨時對象保存當(dāng)前對象A(A->B->C->D->E)的下一個指向:ListNode nextTemp = cur.next 這么做的目的是接下來要改變當(dāng)前對象的下一個指向贩绕,以免丟失火的。此時nextTemp = B(B->C->D->E)
? ? 2.將當(dāng)前對象A(A->B->C->D->E)的下一個節(jié)點(diǎn)指向pre 。cur.next = pre 淑倾,執(zhí)行此步驟后變成A->pre(null)馏鹤。
? ? 3.將pre這個對象賦值為當(dāng)前的對象pre = cur;執(zhí)行此步驟后變成A->pre(A)。
? ? 4.將當(dāng)前的對象變成之前的下一個節(jié)點(diǎn)nextTemp 踊淳。cur = nextTemp ?執(zhí)行此步驟后變成
pre變成A對象假瞬,cur變成B(B->C->D->E)陕靠。
第二次循環(huán):
? ? ? ? 1.創(chuàng)建一個臨時變量保存當(dāng)前對象B(B->C->D->E)的下一個指向:ListNode nextTemp = cur.next。
這個時候nextTemp = C(C->D->E)
? ? ? ? 2.將當(dāng)前對象B(B->C->D->E)的下一個節(jié)點(diǎn)指向pre(A)這個對象脱茉,變成了B-A剪芥;
? ? ? ? 3.將pre這個對象賦值為當(dāng)前對象cur(B),變成pre(B->A)
? ? ? ? 4.將當(dāng)前對象變成之前的下一個節(jié)點(diǎn)nextTemp 琴许。
執(zhí)行此步驟后變成cur變成C(C->D->E)税肪,pre變成B(B->A)對象
以此循環(huán)知道cur為null 退出循環(huán)
最后返回pre這個對象。pre = E(E->D->C->B->A)