链表中倒数第k个结点

xiaoxiao2021-02-28  49

1. 常规思路

public ListNode FindKthToTail(ListNode head, int k) { // 1. 如果是空链表 if (head == null) return null; // 统计链表长度 ListNode p = head; int len = 0; while (p != null) { p = p.next; len++; } // 2. 如果k大于链表长度 if (k > len) { return null; } // 从前向后查找第len-k个位置 ListNode q = head; for (int i = 0; i < len - k; i++) { q = q.next; } return q; }

2. 双指针法

public ListNode FindKthToTail(ListNode head, int k) { // 1. 如果是空链表,结束 if (head == null) return null; // 统计链表长度 ListNode p = head; int len = 0; while (p != null) { p = p.next; len++; } // 2. 如果k大于链表长度,结束 if (k > len) { return null; } // 双指针 ListNode first = head; // 指针1 ListNode second = head; // 指针2 // 使第一个指针向前移动到第k个节点的位置处,从而第一个指针和第二个指针的距离是k for (int i=1; i<=k; i++) { first = first.next; } // 将第一个指针和第二个指针同时向前移动到结束位置,则它们之间的距离仍为n while (first != null) { first = first.next; second = second.next; } return second; }
转载请注明原文地址: https://www.6miu.com/read-2632569.html

最新回复(0)