您的位置:首页 > Web前端

剑指offer-----链表中倒数第k个节点

2018-02-02 13:20 459 查看

1、题目描述

输入一个链表,输出该链表中倒数第k个结点。

2、思路

 设置两个指针,一个指针先向前走k-1步,然后两个指针同时向前走,第一个指针走到结尾时,第二个指针正好走到倒数第k个节点。注意三种情况:

(1)参数k<=0

(2)输入的链表为空

(3)链表中的节点数小于k

代码如下:

class ListNode {

    int val;

    ListNode next = null;

    ListNode(int val) {

        this.val = val;

    }

}

public class Solution {

    public ListNode FindKthToTail(ListNode head,int k) {

        if(k <= 0){//参数k小于等于0

            return null;

        }

        if(head == null){//输入的链表为空

            return null;

        }

        ListNode pAhead = head;

        ListNode pBhead = null;

        for(int i=0;i<k-1;i++){//一个指针先向前走k-1步,然后两个指针同时向前走,第一个指针走到结尾时,第二个

                               //指针正好走到倒数第k个节点

            if(pAhead.next != null){ //链表中的节点小于k个

                 pAhead = pAhead.next;

            }else{

                return null;

            }

        }

        pBhead = head;

        while(pAhead.next != null){

            pAhead = pAhead.next;

            pBhead = pBhead.next;

        }

        return pBhead;

    }

    public static void main(String args[]){

        ListNode node1 = new ListNode(1);

        ListNode node2 = new ListNode(2);

        ListNode node3 = new ListNode(3);

        node1.next = node2;

        node2.next = node3;

        Solution s = new Solution();

        s.FindKthToTail(node1,2);

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: