题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
- 算法
- 1.在头节点前面建立伪节点
- 2.双指针,前指针先走到第k个节点,随后前后指针一起走,当前指针走到结尾null节点时,后指针即指向倒数第k个节点
public ListNode getKthFromEnd(ListNode head, int k) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode before = dummy;
while (k-- > 0) {
before = before.next;
if (before == null) {
return null;
}
}
ListNode behind = dummy;
while (before != null) {
before = before.next;
behind = behind.next;
}
return behind;
} func getKthFromEnd(head *ListNode, k int) *ListNode {
var dummy = ListNode{-1, head}
var before = &dummy
for k > 0 {
before = before.Next
if before == nil {
return nil
}
k--
}
var behind = &dummy
for before != nil {
behind = behind.Next
before = before.Next
}
return behind
} 
京公网安备 11010502036488号