链表中倒数第k个结点

来源:互联网 发布:韩国免费音乐软件 编辑:程序博客网 时间:2024/04/27 13:44

题目描述

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

第一种方法:拿到题目后,首先想到就是构建链表的结构,代码如下:

public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}
其次,就是选择使用递归的想法来实现,方法也比较简单,不用再考虑其边界等等。

1、设置全局变量length为0;

2、遍历到末尾部分;

3、初始化ListNode为空,直达length和k相同时再给其赋值,否则一直为空。

时间复杂度为log(n)。是不是超简单!

public class Solution {    public int length=0;    public ListNode FindKthToTail(ListNode head,int k) {        ListNode result=null;if(head!=null)            result=FindKthToTail(head.next,k);        if(length==k) result=head;        length++;        return result;    }}

另一种方法:首先记录head为temp,head往前进k个节点,然后temp和head一起往前进,至到head为空为止。但这个方法容易出现鲁棒性问题。代码如下

public class Solution {    public ListNode FindKthToTail(ListNode head,int k) {       int n=1;ListNode temp=head;        while(head!=null && n<k){            head=head.next;++n;        }        if(head==null || n!=k) return null;        while(head.next!=null){            temp=temp.next;            head=head.next;        }        return temp;    }}


0 0
原创粉丝点击