链表中倒数第k个节点(Java实现)

剑指offer面试题15


import java.util.Scanner;

public class Demo1 {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int N =sc.nextInt();
		
		/*
		 * 易错点
		 * 思考:哪里错误!!
		 */
	/*	Node head=new Node();
		Node node=head;
		Node nodeNext;
		for (int i = 0; i < N; i++) {
			nodeNext=new Node();
			node.value=sc.nextInt();
			node.next=nodeNext;
			node=node.next;
		}
		node=null;*/
		
		ListNode head=new ListNode();
		ListNode node=head;
		for(int i=0;i<N-1;i++){
			ListNode p=new ListNode();
			node.value=sc.nextInt();
			node.next=p;
			node=node.next;
		}
		node.value=sc.nextInt();
		node.next=null;
		
		
		int k=sc.nextInt();
		System.out.println(head.value);
		ListNode kthNode=FindKthToTail(head,k);
		System.out.println(kthNode.value);
		
		sc.close();
	}
	/**
	 * @param pListHead
	 * @param k
	 * @return
	 * 要考虑鲁棒性,判断:1.如果头结点为空;2.如果k为0;3.如果头结点不为空,但总节点数小于k
	 * 
	 * 
	 */
	public static ListNode FindKthToTail(ListNode pListHead, int k) {
		
		if (pListHead == null || k <= 0) {
			return null;
			// throw new RuntimeException("input error");
		}
		ListNode pAhead = pListHead;
		for (int i = 0; i < k-1; i++) {
			if (pListHead.next != null) {
				pListHead = pListHead.next;
			} else {
				return null;
				// throw new RuntimeException("input error");
			}
		}
		while (pListHead.next != null) {
			pListHead = pListHead.next;
			pAhead = pAhead.next;
		}

		return pAhead;
	}
}

class ListNode {
	int value;
	ListNode next;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值