zoukankan      html  css  js  c++  java
  • 链表中倒数第k个结点

    结点:

    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }

    找到倒数第k个结点:

    public class Solution {
        public ListNode FindKthToTail(ListNode head,int k) {
            if(head == null || k==0) return null;    //判断链表是否为空,以及k值是否为0
            ListNode node1 = head, node2 = head;
            int num = 1;
            while(num<k){
                if(node1.next==null) return null;    //判断链表长度是否小于k值
                node1 = node1.next;
                num++;
            }
            while(node1.next!=null){
                node1 = node1.next;
                node2 = node2.next;
            }
            return node2;
        }
    }

    常规思想是,首先,从头到尾遍历链表,计算出链表的长度,然后遍历第二遍,找到倒数第k个结点。

    这种做法需要遍历两次链表,可能不会满足面试官的要求。

    本方法主要思想:设置两个结点node1,node2指向头结点,首先让node1指向链表的第k个结点,而node2仍然指向头结点。这样两结点每次共同前进一步,直到node1指向最后一个结点,这时,node2就指向了倒数第k个结点。

    注意: 

           1. 要判断链表是否为空,以及k值是否为0。

           2. 要判断k值是否大于链表的长度。

  • 相关阅读:
    Computer Browser服务自动停止
    Group By中Case分类统计
    C#判断网络状态
    Win7中VC6打开文件报错(转)
    SqlBulkCopy(大数据量拷贝)
    vc6开发ActiveX并发布全攻略(二)(转)
    VC6 Activex控件调试
    VC MessageBox
    常用基本AT指令
    WinForm自动重启
  • 原文地址:https://www.cnblogs.com/jiqianqian/p/6603394.html
Copyright © 2011-2022 走看看