题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
核心代码:
func findNodeByDescendIndex(head:ListNode?,index:Int) -> ListNode? {
if head == nil || index < 1 {
return nil
}
var preNode:ListNode? = head
var firstNode:ListNode? = head
for i in 0..<index-1 {
if preNode == nil {
break
}
preNode = preNode?.next
}
while preNode?.next != nil {
preNode = preNode?.next
firstNode = firstNode?.next
}
return firstNode
}
测试代码:
var searchManager:ListNodeManager = ListNodeManager()
var headNode:ListNode?
var searchHeadNode:ListNode?
searchManager.createList(&headNode, data: 1)
searchHeadNode = headNode
searchManager.createList(&headNode, data: 2)
searchManager.createList(&headNode, data: 3)
searchManager.createList(&headNode, data: 4)
searchManager.createList(&headNode, data: 5)
searchManager.createList(&headNode, data: 6)
searchManager.createList(&headNode, data: 7)
searchManager.createList(&headNode, data: 8)
searchManager.createList(&headNode, data: 9)
var searchNode:SearchNode = SearchNode()
var resultNode:ListNode? = searchNode.findNodeByDescendIndex(head: searchHeadNode, index: 3)
if resultNode != nil {
print("FlyElephant-节点的Value--\(resultNode!.value!)")
} else {
print("节点没有值")
}