diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/README.md" index dc157d9ffc2e7..78985e2e3697b 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/README.md" @@ -274,6 +274,51 @@ function insert(head: Node | null, insertVal: number): Node | null { } ``` +#### Swift + +```swift +/* class Node { +* var val: Int +* var next: Node? + +* init(_ val: Int) { +* self.val = val +* self.next = nil +* } +* } +*/ + +class Solution { + func insert(_ head: Node?, _ insertVal: Int) -> Node? { + let newNode = Node(insertVal) + if head == nil { + newNode.next = newNode + return newNode + } + + var current = head + repeat { + if current!.val <= insertVal && insertVal <= current!.next!.val { + break + } + + if current!.val > current!.next!.val && (insertVal >= current!.val || insertVal <= current!.next!.val) { + break + } + + if current!.next === head { + break + } + current = current!.next + } while current !== head + + newNode.next = current!.next + current!.next = newNode + return head + } +} +``` + diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/Solution.swift" "b/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/Solution.swift" new file mode 100644 index 0000000000000..84e5742f75f00 --- /dev/null +++ "b/lcof2/\345\211\221\346\214\207 Offer II 029. \346\216\222\345\272\217\347\232\204\345\276\252\347\216\257\351\223\276\350\241\250/Solution.swift" @@ -0,0 +1,40 @@ +/* class Node { +* var val: Int +* var next: Node? + +* init(_ val: Int) { +* self.val = val +* self.next = nil +* } +* } +*/ + +class Solution { + func insert(_ head: Node?, _ insertVal: Int) -> Node? { + let newNode = Node(insertVal) + if head == nil { + newNode.next = newNode + return newNode + } + + var current = head + repeat { + if current!.val <= insertVal && insertVal <= current!.next!.val { + break + } + + if current!.val > current!.next!.val && (insertVal >= current!.val || insertVal <= current!.next!.val) { + break + } + + if current!.next === head { + break + } + current = current!.next + } while current !== head + + newNode.next = current!.next + current!.next = newNode + return head + } +}