給定單向鏈表的頭指針和一個要刪除的節(jié)點的值,定義一個函數(shù)刪除該節(jié)點谒麦。返回刪除后的鏈表的頭節(jié)點樱蛤。(此題對比原題有改動)
刪除鏈表節(jié)點壮莹,首先就要想到單鏈表的特性,next指針指向下一個節(jié)點荣德,所以就考慮到雙指針闷煤,一個指針尋找要刪除的節(jié)點,一個指向前一個指針之前的節(jié)點涮瞻,找到后可以將后一個指針的next 指向 前一個指針的next鲤拿。代碼自然而然就有如下:
func deleteNode(_ head: ListNode?, _ val: Int) -> ListNode? {
guard head != nil else {
return nil
}
if head!.val == val {
return head?.next
}
var fast = head?.next
var slow = head
while fast != nil {
if fast!.val == val {
slow?.next = fast?.next
return head
}else {
fast = fast?.next
slow = slow?.next
}
}
return nil
}
還有一種遞歸算法:
func deleteNode(_ head: ListNode?, _ val: Int) -> ListNode? {
guard head != nil else {
return nil
}
if head!.val == val {
return head?.next
}
head?.next = deleteNode(head?.next, val)
return head
}