讨论/算法和数据结构/用 Swift 刷题如何避免到处都是感叹号?/
用 Swift 刷题如何避免到处都是感叹号?

随便刷个链表题就这样了,太坑了,有没有可以避免的方案?如328题:

class Solution {
  func oddEvenList(_ head: ListNode?) -> ListNode? {
    if head == nil || head!.next == nil {
      return head
    }
    var odd = head
    var evenHead = odd!.next
    var even = evenHead
    while odd!.next != nil && even!.next != nil {
      odd!.next = even!.next
      odd = odd!.next
      even!.next = odd!.next
      even = even!.next
    }
    
    odd!.next = evenHead
    return head
  }
}
共 2 个回复
  • 第一,optional这几乎是现代编程语言必备的一个特性了,虽然我一开始也不适应,但真正理解了这个特性的必要性之后,从心理上就会开始接受
  • 第二,在写法上,如果觉得丑陋的话,就多用 guard/if let 等语句前置 wrap,给optional已确定的类型,这样会有所改善

所以,慢慢适应,都是被习惯了的🤷‍♂️

1

想要少用强制解包, 可以多看看 Optional 的可选绑定和可选链的相关知识.
对你的代码进行了如下修改, 希望可以帮到你

func oddEvenList(_ head: ListNode?) -> ListNode? {

    guard var odd = head, let evenHead = odd.next else { return head }
    
    var even: ListNode? = evenHead
    
    while let evenNext = even?.next {
        odd.next = evenNext
        odd = evenNext
        
        even?.next = odd.next
        even = odd.next
    }
    
    odd.next = evenHead
    return head
}
1