劍指offer 24 反轉鍊錶

2021-10-07 14:14:36 字數 1746 閱讀 5450

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。

示例:

輸入: 1->2->3->4->5->null

輸出: 5->4->3->2->1->null

限制:

0 <= 節點個數 <= 5000

注意雙指標迭代除了cur和pre兩個指標之外,還需要乙個輔助的指標temp用來儲存cur.next節點的值

1. 遞迴解法找到當前鍊錶的尾結點,就是反轉鍊錶的頭結點

分兩種情況:當鍊表只有空節點、到達鍊錶的尾節點

head.next.next=head;這樣理解:

如果鍊錶是 1 -> 2 -> 3 -> 4 -> 5,那麼此時的cur就是5

而head是4,head的下乙個是5,下下乙個是空

所以head.next.next 就是4 -> 5

cur是不變的,始終都指向尾節點

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

}

2. 雙指標迭代

先申請兩個指標:cur pre;

還需要乙個輔助的指標temp用來儲存cur.next節點的值

pre最初指向null;

cur指向頭節點head,然後不斷遍歷cur,每次遍歷到cur時,都將cur的next指向pre;

然後pre和cur都前進一位;

都迭代完時(cur變成null),pre就是最後乙個節點了

(temp節點相當於中間變數)

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

return pre;

}}

如果不用輔助指標temp,**會這樣寫這樣是錯的

while

(cur != null)

//**只會跑一次,之後cur=null ,pre=1

完整**這樣寫:不知道為啥執行不出來?

package cn.sxt.arrays;

/** * 反轉鍊錶

* @author star ma

* */

public

class

listnodetest

public string show()

}//遞迴

public listnode reverselist

(listnode head)

listnode cur =

reverselist

(head.next)

; head.next.next = head;

head.next = null;

return cur;

}public

void

testreverse()

}

劍指Offer 24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。例 輸入 1 2 3 4 5 none 輸出 5 4 3 2 1 none 雙指標遍歷鍊錶,將當前節點的next設為前乙個節點。注意儲存當前節點的next來遍歷。時間複雜度 o n 空間複雜度 o 1 def reverse l...

劍指offer24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。樣例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null思路 初始化乙個新的頭節點new head,然後用尾插法把原始鍊錶中的結點插入新的頭節點。最後return new head next.acwing 3...

劍指offer24 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出轉換後的頭結點。首先,從題目中可得知為單鏈表結構,只有指向下乙個元素的指標。而要完成整個鍊錶的反轉則需要將所有next指標進行反轉。定義3個指標,分別指向當前遍歷的節點 它的前乙個節點以及後乙個節點。pnode ppre pre pnode phe...