zoukankan      html  css  js  c++  java
  • 剑指 Offer 22. 链表中倒数第k个节点

    原题链接

    题解

    方式一:

    最容易想到的是先遍历一遍链表求出链表的长度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;
        }
    }
    
    如有错误,欢迎指正!
  • 相关阅读:
    单调队列+二分 G
    dp cf 1700 最近几天的刷题
    dp 20190618
    dp 20190617
    dp cf 20190615
    dp cf 20190614
    powercli
    zabbix docker-weixin
    cenetos-大文件排序
    esxcli命令
  • 原文地址:https://www.cnblogs.com/Lngstart/p/14758267.html
Copyright © 2011-2022 走看看