package structure.list;
import structure.list.node.LNode_01;
/**
* 查找链表中倒数第k个结点
*
* @author Toy
*
*/
public class List_K {
/**
* 使用count计数,slow离fast距离k个
*
* @param head
* @param k
* @return
*/
public LNode_01 listk_01(LNode_01 head, int k) {
LNode_01 fast = head;
LNode_01 slow = null;
int count = 0;// 记录划过多少节点
while (fast != null) {
if (count == k - 1) {
slow = head;
} else if (count > k - 1) {
slow = slow.next;
}
fast = fast.next;
count++;
}
System.out.println("list size is: " + count);
return slow;
}
/**
* 使用count计数,遍历两次
*
* @param head
* @param k
* @return
*/
public LNode_01 listk_02(LNode_01 head, int k) {
LNode_01 fast = head;
int count = 0;// 记录节点总数
while (fast != null) {
count++;
fast = fast.next;
}
System.out.println("list size is: " + count);
count = count - k + 1;// 需要遍历的节点数
if (count < 0) {
System.out.println("invalid k: " + k);
return null;
}
fast = head;
while (fast != null) {
count--;
if (count == 0) {
break;
}
fast = fast.next;
}
return fast;
}
/**
* @param args
*/
public static void main(String[] args) {
List_K lk = new List_K();
LinkList_01 list = new LinkList_01();
list.creat();
list.show();
LNode_01 n = lk.listk_01(list.header, 2);
if (n == null) {
System.out.println("don't exist ");
} else {
System.out.println(n.data);
}
n = lk.listk_02(list.header, 2);
if (n == null) {
System.out.println("don't exist ");
} else {
System.out.println(n.data);
}
}
}
查找链表中倒数第k个结点
最新推荐文章于 2024-07-25 08:40:26 发布