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

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

    方法一
    假设所给链表的长度为n,那么倒数第k和节点就是从头结点开始第n-k+1个节点,所以需要遍历两次链表,第一次遍历得出链表的长度,第二次表理你获得第n-k+1个节点

        public ListNode FindKthToTail(ListNode head,int k) {
    
        	if(head == null || k <= 0) {
        		return null;
        	}
        	int len = 0;
        	ListNode node = head;
        	while(node != null) {
        		++len;
        		node = node.next;
        	}
        	
        	if(len < k) return null;
        	for (int j = 0; j <= len - k && head !=null; j++) {
    			if(j == (len - k)) {
    				break;
    			}
    			head = head.next;
    		}
        	return head;
        }
    

    方法二
    设置两个指针且初始化都指向头结点,然后再让第一个指针走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点。

    相当于制造了一个K长度的尺子,把尺子从头往后移动,当尺子的右端与链表的末尾对齐的时候,尺子左端所在的结点就是倒数第k个结点

        public ListNode FindKthToTail_2(ListNode head,int k) {
        	if(head == null || k <= 0) {
        		return null;
        	}
        	
        	ListNode node1 = head, node2 = head;
        	
        	for (int i = 0; i < (k - 1); i++) {
        		if(node1.next != null) {
        			node1 = node1.next;
        		}
        		else return null;
    		}
        	
        	while(node1.next != null) {
        		node1 = node1.next;
        		node2 = node2.next;
        	}
        	
        	return node2;
        }
    
  • 相关阅读:
    git上传本地项目
    第十一章 持有对象
    java 闭包与回调
    类名.class 类名.this 详解
    匿名内部类
    第十章 内部类
    Java简单调用Zookeeper服务
    Linux下ZooKeeper集群安装
    Linux自动化安装JDK
    linux下初步实现Keepalived+Nginx高可用
  • 原文地址:https://www.cnblogs.com/lishanlei/p/10707738.html
Copyright © 2011-2022 走看看