算法-求单向链表的倒数第K个节点

版权声明:转载请注明来源 https://blog.csdn.net/tangyuan_sibal/article/details/88431927

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

思路1:遍历两次链表,第一次计算总共有几个节点,然后求倒数第k个节点的位置(n-k+1),但是要遍历两次,感觉不够爽,

 public class Solution {
        public ListNode FindKthToTail(ListNode head,int k) {    
      ListNode p = head;
        ListNode q = head;
        int i = 0;
        for(;p!=null;i++)
        {
            p = p.next;
        }
        for(int j=0;j<i-k;j++)
        {
            q = q.next;
        }
        if(k>i)
            return null;
        return q;
    }
    }

思路2:设置两个指针,第一个p指针先走,等第一个指针走了k-1步之后,第二个q指针开始走,他们直接差了k个身位,当p走到尽头时,q刚好在倒数第k个位置。

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {    
        ListNode p ,q;
        p = q = head;
        int i = 0;
        for(;p!=null;i++)
        {
            if(i>=k)
                q = q.next;
            p = p.next;
        }
        return i<k?null:q;
    }
}

但是这两个的时间复杂度是一样的,都是O(n)

猜你喜欢

转载自blog.csdn.net/tangyuan_sibal/article/details/88431927