剑指Offer—链表中倒数第K个节点

剑指Offer之——链表中倒数第K个节点

题目

解题思路:解题思路:设连链表的长度为N,并定义两个指针p1,p2分别指向链表的头节点,首先p1向后移动K个节点,则剩下N-K个节点,然后指针p1和指针p2同时向后移动,直到节点p1为null,则p1一共移动了N个节点,指针p2一共移动了N-(N-K)=K个节点;返回节点p2。

代码

 /**
 * 解题思路:设连链表的长度为N,并定义两个指针p1,p2分别指向链表的
 * 头节点,首先p1向后移动K个节点,则剩下N-K个节点,然后指针p1和指针
 * p2同时向后移动,直到节点p1为null。则p1一共移动了N个节点,指针p2
 * 一共移动了N-(N-K)=K个节点;返回节点p2.
 * @param head  链表头节点
 * @param k     倒数第K个
 * @return      倒数第k个节点
 */
public ListNode FindKthToTail(ListNode head,int k) {
    if (head==null){
        return null;
    }
    ListNode p1,p2;
    p1 = p2 = head;
    while (p1!=null&&k-->0){
        p1 = p1.next;
    }
    if (k>0){
        return null;
    }
    while (p1!=null){
        p1 = p1.next;
        p2 = p2.next;
    }
    return p2;
}

猜你喜欢

转载自blog.csdn.net/hnuwyd/article/details/80138648
今日推荐