mio4 Java Web & Web Security

链表中倒数第k个结点

2018-08-27
mio4

阅读:


链表中倒数第k个结点

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

  • 这是一道在面试中比较常见的问题
  • 可以首先遍历一遍链表得到长度n,然后遍历时取第n-k+1个节点就是目标节点,虽然时间复杂度为O(n),但是需要遍历两遍链表
  • 使用双指针的方式只用遍历一遍链表就能得到倒数第k个节点:首先让两个指针距离为k-1,然后往后同时移动两个指针,这样第二个指针指向最后一个节点时,第一个指针指向的节点距离最后一个节点为k-1,即是倒数第k个节点
  • 需要注意的边界条件
    • 输入的链表是空链表
    • 链表的长度实质上并没有达到k
class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
public class Solution {
	public ListNode FindKthToTail(ListNode head,int k) {
		ListNode p1 = head;
		if(p1 == null || k <= 0)
			return null;
		for(int i=0; i < k-1; i++){
			if(p1.next == null)
				return null;
			p1 = p1.next;
		}
		ListNode p2 = head;

		while(p1.next != null){
			p1 = p1.next;
			p2 = p2.next;
		}
		return p2;
	}
}


下一篇 反转链表

Comments

Content