今日算法之_190_找出单链表中倒数第K个元素
前言
Github:https://github.com/HealerJean
1、找出单链表中倒数第K个元素
找出单链表中倒数第K个元素
例如给定单链表:1->2->3->4->5->6->7,则单链表的倒数第k=3个元素为5.
1.1、解题思路
1.2、算法
1.2.1、算法1-遍历两次
public ListNode findLastK1(ListNode head, int k) {
ListNode listNode = head;
int n = 0;
while (listNode != null) {
n++;
listNode = listNode.next;
}
int i = 1;
while (i <= n - k) {
listNode = listNode.next;
i++;
}
return listNode;
}
// 初始化数据
public ListNode listNode() {
ListNode listNode_5 = new ListNode(5, null);
ListNode listNode_4 = new ListNode(4, listNode_5);
ListNode listNode_3 = new ListNode(2, listNode_4);
ListNode listNode_2 = new ListNode(1, listNode_3);
ListNode listNode_1 = new ListNode(0, listNode_2);
return listNode_1;
}
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
1.2.2、算法2-遍历一次
public ListNode findLastK2(ListNode head, int k) {
ListNode list1 = head;
ListNode list2 = head;
for (int i = 0; i < k - 1 && list1 != null; i++) {
list1 = list1.next;
}
while (list1 != null) {
list1 = list1.next;
list2 = list2.next;
}
return list2;
}
// 初始化数据
public ListNode listNode() {
ListNode listNode_5 = new ListNode(5, null);
ListNode listNode_4 = new ListNode(4, listNode_5);
ListNode listNode_3 = new ListNode(2, listNode_4);
ListNode listNode_2 = new ListNode(1, listNode_3);
ListNode listNode_1 = new ListNode(0, listNode_2);
return listNode_1;
}
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
1.3、测试