日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List

發(fā)布時(shí)間:2024/7/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公眾號:山青詠芝(shanqingyongzhi)
?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/9890204.html?
?如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
?原文已修改更新!強(qiáng)烈建議點(diǎn)擊原文地址閱讀!支持作者!支持原創(chuàng)!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Given a linked list, remove the?n-th node from the end of list and return its head.

Example:

Given linked list: 1->2->3->4->5, and n = 2.After removing the second node from the end, the linked list becomes 1->2->3->5.

Note:

Given?n?will always be valid.

Follow up:

Could you do this in one pass?

給定一個(gè)鏈表,刪除鏈表的倒數(shù)第?n?個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。

示例:

給定一個(gè)鏈表: 1->2->3->4->5, 和 n = 2.當(dāng)刪除了倒數(shù)第二個(gè)節(jié)點(diǎn)后,鏈表變?yōu)?1->2->3->5.

說明:

給定的?n?保證是有效的。

進(jìn)階:

你能嘗試使用一趟掃描實(shí)現(xiàn)嗎?


?12ms

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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 var endPointer : ListNode? = head 15 var nFromEndPointer : ListNode? = nil 16 var counter = n 17 18 while endPointer != nil { 19 if counter == 0 { 20 if nFromEndPointer == nil { 21 nFromEndPointer = head 22 } else { 23 nFromEndPointer = nFromEndPointer?.next 24 } 25 } 26 27 endPointer = endPointer?.next 28 29 if counter > 0 { 30 counter -= 1 31 } 32 } 33 34 if nFromEndPointer == nil { 35 if counter == 0 { 36 return head?.next 37 } 38 return nil 39 } else { 40 nFromEndPointer?.next = nFromEndPointer?.next?.next 41 } 42 43 return head 44 } 45 }

16ms

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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 let dummy = ListNode(0) 15 var slow: ListNode? = dummy 16 var fast: ListNode? = dummy 17 18 slow?.next = head 19 for _ in 1...(n + 1) { 20 fast = fast?.next 21 } 22 while fast != nil { 23 slow = slow?.next 24 fast = fast?.next 25 } 26 slow?.next = slow?.next?.next 27 28 return dummy.next 29 } 30 }

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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 guard let head = head else { 15 16 return nil 17 } 18 19 20 if n == 1 && head.next == nil { 21 22 return nil 23 } 24 25 var cur: ListNode? = head 26 var last: ListNode? = head 27 28 for i in 1..<n { 29 30 last = last?.next 31 } 32 33 var prev: ListNode? 34 while last?.next != nil { 35 prev = cur 36 cur = cur?.next 37 last = last?.next 38 } 39 40 prev?.next = prev?.next?.next 41 42 return prev == nil ? head.next : head 43 } 44 }

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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 var result:ListNode? = head; 15 var tempNode:ListNode? = result; 16 var tempNode2:ListNode? = result; 17 if head! == nil { 18 return head; 19 } 20 21 var i = 0; 22 while i < n && tempNode!.next != nil { 23 tempNode = tempNode!.next; 24 i += 1; 25 } 26 while (tempNode!.next != nil) { 27 i += 1; 28 tempNode = tempNode!.next; 29 tempNode2 = tempNode2!.next; 30 } 31 if (i + 1 == n) { 32 return result!.next; 33 }else { 34 tempNode2!.next = tempNode2!.next!.next; 35 return result; 36 } 37 } 38 }

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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 var first: ListNode? = head 15 var n:Int = n 16 while(n-- != 0) 17 { 18 first=first!.next 19 } 20 if first == nil 21 { 22 return head!.next 23 } 24 var sec: ListNode? = head 25 while(first!.next != nil) 26 { 27 sec = sec!.next 28 first = first!.next 29 } 30 sec!.next = sec!.next!.next 31 return head 32 } 33 } 34 35 /*擴(kuò)展Int類,實(shí)現(xiàn)自增++、自減--運(yùn)算符*/ 36 extension Int{ 37 //后綴--:先執(zhí)行表達(dá)式后再自減 38 static postfix func --(num:inout Int) -> Int { 39 //輸入輸出參數(shù)num 40 let temp = num 41 //num減1 42 num -= 1 43 //返回減1前的數(shù)值 44 return temp 45 } 46 }

?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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 guard let _ = head else { 15 return nil 16 } 17 18 var preNode = head 19 var curNode = head 20 var count: Int = 0 21 while count < n { 22 curNode = curNode?.next 23 count += 1 24 } 25 if curNode == nil { 26 return preNode?.next 27 } 28 29 while let _ = curNode?.next { 30 preNode = preNode?.next 31 curNode = curNode?.next 32 } 33 34 preNode?.next = preNode?.next?.next 35 return head 36 } 37 }

28ms

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 removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? { 14 var resultArray = [ListNode]() 15 var tmpNode = head 16 var resultNode = head 17 repeat { 18 resultArray.append(tmpNode!) 19 tmpNode = tmpNode?.next 20 }while tmpNode != nil 21 22 let arrayCount = resultArray.count 23 if arrayCount == n { 24 resultNode = head?.next 25 return resultNode 26 } 27 resultArray[arrayCount - n - 1].next = resultArray[arrayCount - n].next 28 return resultNode 29 } 30 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/strengthen/p/9890204.html

總結(jié)

以上是生活随笔為你收集整理的[Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。