首页 > 其他 > 详细

剑指 Offer 22. 链表中倒数第k个节点

时间:2021-05-12 10:13:29      阅读:14      评论:0      收藏:0      [点我收藏+]

原题链接

题解

方式一:

最容易想到的是先遍历一遍链表求出链表的长度len, 倒数第k个节点(题目中说下表从1开始)就是顺序的len - k + 1个节点,然后再遍历一遍找到答案就行。
在本题中数据中的k好像没有超出链表长度的范围,所以不用判定就行了。如果题目中k有可能会超出范围,那么是需要特判的。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        int res = 0;
        ListNode p = head;
        while(p != null){
            res ++;
            p = p.next;
        }
        int t = res - k;
        while((t --) != 0){
            head = head.next;
        }

        return head;
    }
}

方式二

可以使用双指针的方式,定义一个指向链表头指针p,先让p走k步,那么剩下p到链表的最后还有len - k步,刚好是head走len - k步就可以到达len - k + 1个结点,所以两个指针一起前进就行了。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode p = head;
        while((k --) != 0){
            p = p.next;
        }

        while(p != null){
            head = head.next;
            p = p.next;
        }

        return head;
    }
}

剑指 Offer 22. 链表中倒数第k个节点

原文:https://www.cnblogs.com/Lngstart/p/14758267.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!