下面是Java输出链表倒数第k个节点的完整攻略:
-
理解题意意义:输入一个链表,输出该链表中倒数第k个节点的值。
-
考虑边界条件:输入的链表为空或k不能大于链表长度。
-
定义两个指针,分别指向链表头部。让其中一个从0开始,先走k步,另一个开始走。然后两个指针同步走,直到其中一个到达链表尾部。另一个指针此时就是链表倒数第k个节点。
-
编写代码:
public ListNode findKthToTail(ListNode head, int k) {
if(head == null || k <= 0) {
return null;
}
ListNode pNode1 = head;
ListNode pNode2 = head;
for(int i = 0; i < k-1; i++) {
if(pNode1.next != null) {
pNode1 = pNode1.next;
} else {
return null;
}
}
while(pNode1.next != null) {
pNode1 = pNode1.next;
pNode2 = pNode2.next;
}
return pNode2;
}
- 测试代码:
public void test() {
int[] dataArray = {1, 2, 3, 4, 5};
ListNode head = createLinkedList(dataArray);
ListNode kthListNode = findKthToTail(head, 3);
System.out.println(kthListNode.val); // 3
}
private static ListNode createLinkedList(int[] dataArray) {
ListNode head = new ListNode(-1);
ListNode p = head;
for (int i = 0; i < dataArray.length; i++) {
p.next = new ListNode(dataArray[i]);
p = p.next;
}
return head.next;
}
- 示例1:输入链表 null,k=3,期望输出 null
int[] dataArray = {};
ListNode head = createLinkedList(dataArray);
ListNode kthListNode = findKthToTail(head, 3);
System.out.println(kthListNode); // null
- 示例2:输入链表 1->2->3->4->5,k=3,期望输出 3
int[] dataArray = {1, 2, 3, 4, 5};
ListNode head = createLinkedList(dataArray);
ListNode kthListNode = findKthToTail(head, 3);
System.out.println(kthListNode.val); // 3
以上就是Java输出链表倒数第k个节点的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java输出链表倒数第k个节点 - Python技术站