題目:定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點。
思想:從頭開始調整鏈表的指向,將當前節點指向下一個節點的指針,改爲指向前一個節點。從頭結點開始,頭結點的前一個節點爲null。
java實現:(非遞歸)
public static ListNode reverseList(ListNode head) {
if(head==null) return null;
ListNode preNode=null;
ListNode node=head;//當前節點
//ListNode nextNode=node.next;
ListNode reverseHead=null;//轉變後的頭結點
while(node!=null) {
ListNode nextNode=node.next;
if(nextNode==null) {
reverseHead=node;
//return reverseHead;
}
node.next=preNode;
preNode=node;
node=nextNode;
//nextNode=nextNode.next;
}
return reverseHead;
}
遞歸:先遞歸訪問到最後一個節點作爲頭結點,然後向前更改指針指向。
public static ListNode reverseList(ListNode head) {
if(head==null) return null;
ListNode preNode=null;
ListNode node=head;//當前節點
//ListNode nextNode=node.next;
ListNode reverseHead=null;//轉變後的頭結點
while(node!=null) {
ListNode nextNode=node.next;
if(nextNode==null) {
reverseHead=node;
//return reverseHead;
}
node.next=preNode;
preNode=node;
node=nextNode;
//nextNode=nextNode.next;
}
return reverseHead;
}