输出链表中倒数第k个结点

链表中倒数第k个结点 :题目描述:输入一个链表,输出该链表中倒数第k个结点。

  • 示例:输入:1->4->7->2->5->6, k = 3;
  • 输出: 7->2->5

思路:定义新结点从头开始遍历链表,移动 k 次后停止,再定义新的结点指向链表头结点,两个结点同时后移,直至前一个为 null。

  1. 注意:链表可能一开始就是空的。
  2. 如果 k 等于链表长度,如1->2->3,k = 3时应该返回原链表1->2->3。
  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;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值