diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/README.md" index e9f6d371ff406..b353bd48a407c 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/README.md" @@ -349,6 +349,55 @@ public class Solution { } ``` +#### Swift + +```swift +/** + * Definition for singly-linked list. + * public class ListNode { + * var val: Int + * var next: ListNode? + * init() { self.val = 0; self.next = nil; } + * init(_ val: Int) { self.val = val; self.next = nil; } + * init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } + * } + */ + +class Solution { + func isPalindrome(_ head: ListNode?) -> Bool { + guard let head = head else { return true } + + var slow = head + var fast = head.next + while fast != nil && fast?.next != nil { + slow = slow.next! + fast = fast?.next?.next + } + + var cur = slow.next + + var prev: ListNode? = nil + while cur != nil { + let nextTemp = cur?.next + cur?.next = prev + prev = cur + cur = nextTemp + } + + var left = head + var right = prev + while right != nil { + if left.val != right?.val { + return false + } + left = left.next! + right = right?.next + } + return true + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/Solution.swift" new file mode 100644 index 0000000000000..6cd6756db7bfd --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 027. \345\233\236\346\226\207\351\223\276\350\241\250/Solution.swift" @@ -0,0 +1,44 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * var val: Int + * var next: ListNode? + * init() { self.val = 0; self.next = nil; } + * init(_ val: Int) { self.val = val; self.next = nil; } + * init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } + * } + */ + +class Solution { + func isPalindrome(_ head: ListNode?) -> Bool { + guard let head = head else { return true } + + var slow = head + var fast = head.next + while fast != nil && fast?.next != nil { + slow = slow.next! + fast = fast?.next?.next + } + + var cur = slow.next + + var prev: ListNode? = nil + while cur != nil { + let nextTemp = cur?.next + cur?.next = prev + prev = cur + cur = nextTemp + } + + var left = head + var right = prev + while right != nil { + if left.val != right?.val { + return false + } + left = left.next! + right = right?.next + } + return true + } +} \ No newline at end of file