題目描述:html
206:反轉鏈表數據結構
首先想到的是用棧的數據結構來實現反轉,由於棧的先進後出特色,咱們能夠從頭依次將每一個節點壓人棧內,再一個個彈出構形成一條新的鏈表便可。spa
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseList(ListNode head) {
// 建立一個空棧 Stack<Integer> s = new Stack<>(); ListNode res = new ListNode(0); ListNode p = head; ListNode q = res; // 遍歷原鏈表,將節點入棧 while(p != null) { s.push(p.val); p = p.next; } // 節點出棧,構形成新的鏈表 while(!s.isEmpty()) { q.next = new ListNode(s.pop()); q = q.next; }
// 返回構造後的鏈表 return res.next; } }
class Solution { public ListNode reverseList(ListNode head) {
// 建立新的節點 ListNode res = null; ListNode next = null;
// p指向頭結點 ListNode p = head; while(p != null) { next = p.next; p.next = res; res = p; p = next; } return res; } }
此方法時間效率爲O(n),戰勝了100%的提交記錄。3d
參考資料code