/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.*;
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode cur= head;
ListNode pre = null;
if(head==null)
return null;
while(cur!=null){
ListNode tem = cur.next;
cur.next = pre;
pre = cur;
cur = tem;
}
return pre;
}
}
鏈表反轉詳解:
鏈表是單鏈表,只可以指向后面的節點,遍歷也只可以向后,
所以需要new一個新的ListNode用來存盤反轉后的鏈表,pre
然后還需要一個臨時ListNode來存盤臨時存盤當前節點指向的節點,(這里must,因為下一步會把當前節點的下一個指標變更,要是沒有這一步,下一步執行了,當前節點的.next就丟失了,)
然后把當前節點的下一個指標指向已經反轉后的節點,(這里也是must,也是核心,當前節點的下一個節點=(賦值符號)之前已經反轉的節點,執行完這一步當前節點指向的鏈表都是反轉之后)
然后當前節點所帶領的鏈表就是反轉后的鏈表,賦值給pre(把反轉之后的鏈表再次賦值給存盤反轉之后的鏈表pre)
然后把臨時表指向的當前鏈表的后一個指標賦值給當前鏈表,繼續回圈,(這里取剛才第一步臨時鏈表存盤的當前節點的下一個節點),
總結:設計到鏈表的問題,總會需要一個臨時表來存盤當前節點的下一個節點,然后再對此節點進行操作,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/291755.html
標籤:Java
