为了找到单向链表的倒数第k个元素:
1.最容易想到的就是先遍历一遍链表求出链表的长度len,求倒数第k个元素转化为求正的数第 len-k 个元素,两次遍历确实可以得到所求元素,但为免有些麻烦,进行优化
2.如果延从头至尾的方向进行遍历,如果从一个元素开始再向后遍历k个元素到达链表尾,那么该元素就是要找的倒数第k个元素,根据这个特点可以设计如下算法:从头结点开始,依次对每个节点进兴这样的测试,遍历k个元素看看是否到达末尾,直到找到这个元素。此方法对于链表中的大部分元素需要向后遍历k个元素,如果链表长度为n 则时间负载度为O(kn)级,效率太低。
3.存在另一种高效的方法:设置两个指针都指向头节点 。让第一个指针先从头结点往后移动k-1步,然后和另一个节点一起开始向后遍历,当先行的指针的为null时 ,后续指针位置即为要求位置:代码如下
Node findElem(Node head,int k){
if(k<1)
return null;
Node p1=head;
Node p2=head;
for (int i=0;i<k-1;i++){//先行节点先走k-1步
p1=p1.next;
}
if(p1==null){
System.out.println(k+“不合法”);
return null
}
while(p1.next!=null){
p1=p1.next;
p2=p2.next;
}
return p2;
}
小算法:查找出单链表中倒数第k个元素
最新推荐文章于 2021-07-30 09:50:44 发布