剑指offer-面试题 15:链表中倒数第 k 个结点

面试题 15:链表中倒数第 k 个结点

题目:输入一个链表,输出该链表中倒数第 k 个结点。为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾结点是倒数第一个结点。例如一个有 6 个结点的链表,从头结点依次是 1,2,3,4,5,6。倒数第三个结点就是值为 4 的结点。

思路

这道题和上一道题考点一样,都是基于单向链表的单向性。
思路是先创建一个结点temp指向头结点,将其向后移动k-1个位置(如果可以),之后创建一个新的结点result指向头结点,之后temp和result同时向后移动,直到temp到达尾结点。则result所在的位置就是链表中倒数第k个结点。这个方法简单明了,而其余的方法例如用栈大都会导致多余的时间和空间开销。

代码

package swordOffer;

/**
 * 面试题 15:链表中倒数第 k 个结点
 * 题目:输入一个链表,输出该链表中倒数第 k 个结点。为了符合大多数人的习惯,本题从
 * 1开始计数,即链表的尾结点是倒数第一个结点。例如一个有 6 个结点的链表,从头结点
 * 依次是 1,2,3,4, 5,6。倒数第三个结点就是值为 4 的结点。
 * 
 * @author Stephen Huge
 *
 */
public class Ex15CountBackwardsInLinkList {

    public static void main(String[] args) {
        Ex15CountBackwardsInLinkList cbwill = new Ex15CountBackwardsInLinkList();       
        ListNode a = new ListNode(1);
        ListNode b = new ListNode(2);
        ListNode c = new ListNode(3);
        ListNode d = new ListNode(4);
        a.next = b;
        b.next = c;
        c.next = d;
        ListNode sol = cbwill.countBackwardsInLinkList(a, 2);
//      System.out.println(sol.getClass().getSimpleName()); //对象名无法打印
    }
    public ListNode countBackwardsInLinkList(ListNode node, int k) {
        if(node == null || k == 0) {
            return null;
        }
        ListNode temp = null;
        ListNode result = null;
        temp = node;
        for(int i = 0; i < k; i++) {
            if(temp.next != null) {
                temp = temp.next;
            }else{
                return null;
            }
        }
        result = node;
        while(temp.next != null) {
            temp = temp.next;
            result = result.next;
        }
        return result;
    }
//  public class ListNode{
//      int data;
//      ListNode next;
//      
//      public ListNode(int data) {
//          this.data = data;
//      }
//  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值