★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-kirtkgnf-md.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
Reverse a singly linked list.node
Example:git
Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
Follow up:github
A linked list can be reversed either iteratively or recursively. Could you implement both?微信
反轉一個單鏈表。app
示例:ide
輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2->1->NULL
進階:
你能夠迭代或遞歸地反轉鏈表。你可否用兩種方法解決這道題?spa
20mscode
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * public var val: Int 5 * public var next: ListNode? 6 * public init(_ val: Int) { 7 * self.val = val 8 * self.next = nil 9 * } 10 * } 11 */ 12 class Solution { 13 func reverseList(_ head: ListNode?) -> ListNode? { 14 if head == nil || head?.next == nil 15 { 16 return head 17 } 18 var h = reverseList(head?.next) 19 head?.next?.next = head 20 head?.next = nil 21 return h 22 } 23 }
20mshtm
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * public var val: Int 5 * public var next: ListNode? 6 * public init(_ val: Int) { 7 * self.val = val 8 * self.next = nil 9 * } 10 * } 11 */ 12 class Solution { 13 func reverseList(_ head: ListNode?) -> ListNode? { 14 if head == nil { 15 return nil 16 } 17 18 var pre : ListNode? 19 var next : ListNode? 20 var cur : ListNode? = head 21 22 while (cur != nil) { 23 next = cur?.next; 24 cur?.next = pre; 25 pre = cur; 26 cur = next; 27 } 28 29 return pre; 30 } 31 }
20ms
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * public var val: Int 5 * public var next: ListNode? 6 * public init(_ val: Int) { 7 * self.val = val 8 * self.next = nil 9 * } 10 * } 11 */ 12 class Solution { 13 func reverseList(_ head: ListNode?) -> ListNode? { 14 if head == nil { 15 return head 16 } 17 18 if head?.next == nil { 19 return head 20 } 21 22 guard let r = reverseList(head?.next) else { return nil } 23 if r.next == nil { 24 r.next = head 25 } else { 26 head!.next!.next = head 27 } 28 head!.next = nil 29 return r 30 } 31 }
24ms
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * public var val: Int 5 * public var next: ListNode? 6 * public init(_ val: Int) { 7 * self.val = val 8 * self.next = nil 9 * } 10 * } 11 */ 12 class Solution { 13 func reverseList(_ head: ListNode?) -> ListNode? { 14 if head == nil || head?.next == nil { 15 return head 16 } 17 18 guard let r = reverseList(head?.next) else { return nil } 19 if r.next == nil { 20 r.next = head 21 } else { 22 head!.next!.next = head 23 } 24 head!.next = nil 25 return r 26 } 27 }
24ms
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * public var val: Int 5 * public var next: ListNode? 6 * public init(_ val: Int) { 7 * self.val = val 8 * self.next = nil 9 * } 10 * } 11 */ 12 class Solution { 13 func reverseList(_ head: ListNode?) -> ListNode? { 14 if head == nil { 15 return nil 16 } 17 var root = head 18 19 var stack = [ListNode]() 20 while root != nil { 21 stack.append(root!) 22 root = root!.next 23 } 24 25 root = stack.last! 26 var next = root 27 for i in stride(from: stack.count - 2, to: -1, by: -1) { 28 let node = stack[i] 29 node.next = nil 30 next?.next = node 31 next = node; 32 } 33 return root 34 } 35 }