链表中倒数第k个结点 :题目描述:输入一个链表,输出该链表中倒数第k个结点。
- 示例:输入:1->4->7->2->5->6, k = 3;
- 输出: 7->2->5
思路:定义新结点从头开始遍历链表,移动 k 次后停止,再定义新的结点指向链表头结点,两个结点同时后移,直至前一个为 null。
- 注意:链表可能一开始就是空的。
- 如果 k 等于链表长度,如1->2->3,k = 3时应该返回原链表1->2->3。
- 如果 k 的值大于链表长度,返回 null。
public ListNode FindKthToTail(ListNode head,int k) {
ListNode prev = head;
while (k != 0) {
k--;
prev = prev.next;
if (prev == null) {
if (k == 0) {
return head;
} else {
return null;
}
}
}
ListNode result = head;
while (prev != null) {
prev = prev.next;
result = result.next;
}
return result;
}
public int getLinkLength(ListNode head){
int len = 0;
for(ListNode p = head;p != null;p = p.next){
len++;
}
return len;
}
public ListNode findKthToTail(ListNode head,int k){
int len = getLinkLength(head);
int step = len - k;
ListNode p = head;
if(k > len || k < 0){
System.out.println("k值不在合法范围内!");
return null;
}else if(k == len){
return head;
}else{
for(int i = 0;i < step;i++){
p = p.next;
}
}
return p;
}