您的位置:首页 > 其它

微软算法100题13 查找单向链表倒数第K个节点

2015-10-23 16:55 447 查看
第13 题:
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0 个结点为链表的尾指针

思路:先遍历链表,求得总节点数N,则倒数第K个节点是正数N-K,时间复杂度为o(N+N-K)

package com.rui.microsoft;

public class Test13_FindKthNodeFromBack {

public static void main(String[] args) {
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);

node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;

Node node = Test13_FindKthNodeFromBack.getKthFromBack(node1, 3);
System.out.println(node.value);
}

public static Node getKthFromBack(Node head, int k){
Node node = head;
if(null == node)return null;
int size = 0;
while(null != node){
node = node.next;
size++;
}

int pos = size - k;
if(pos < 0) return null;

//put pointer to the head again
int i = 0;
node = head;
while(i < pos){
node = node.next;
i++;
}
return node;
}

static class Node{
int value;
Node next;
Node(int v){
this.value = v;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: