問題描述
定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表并輸出反轉后的鏈表的頭結點。鏈表結點如下:
1
2
3
4
5
6
7
|
public class ListNode { int val; ListNode next = null ; ListNode( int val) { this .val = val; } } |
思路1:
要想反轉鏈表,對于結點i,我們要把它的next指向它的前趨,因此我們需要保存前趨結點,同時,如果我們已經把i的next重新賦值,會無法找到i的后繼,因此,在重新賦值之前,我們要保存i的后繼。
代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public ListNode ReverseList(ListNode head) { if (head == null ){ return null ; } ListNode rHead = null ; ListNode prior = null ; //store prior ListNode q = head; //store current while (q != null ){ ListNode next = q.next; //store the next if (next == null ){ rHead = q; } q.next = prior; prior = q; q = next; } return rHead; } |
思路2:
使用遞歸的思想(暫時沒有想到,因為如果用遞歸的話,每次應該是:鏈表的第一個結點<—遞歸返回的鏈表的尾指針,但是這樣的話就無法獲得反轉后的頭指針了。)后面再思考吧。
總結
以上就是本文關于Java語言實現反轉鏈表代碼示例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。
原文鏈接:http://blog.csdn.net/lilianforever/article/details/51839810