Q:链表的倒数第K个元素
2018-06-02 15:31
141 查看
问题:如何得到链表中的倒数第k个元素?
一种简单的思路是遍历链表一遍,并统计出链表中节点的数目,然后计算出倒数第k个元素到链表头节点的元素的距离,然后得到对应的结果。但是,我们能否有一种更加简便的方式来得到倒数的第k个元素的结果呢?答案肯定有啦,不然我也不会总结成博文了.....哈哈哈哈~
具体的解题步骤如下:
- 初始化两个指针a和b,其均指向链表头节点。
- b指针先走k-1步
- a指针和b指针均同时走一步
- 重复步骤3,直到b指针走到链表末尾节点,此时,a指针所指向的链表节点,即为其对应的链表中的倒数第k个元素
具体代码实现如下:
/** * @author 学徒 *用于获取链表中的倒数第k个元素的节点值 */ public class ReverseKth { /** * 链表元素的节点 * @param <T> 值类型 */ static class Node<T>{ //节点值 T value; //节点的下一个节点的指针 Node<T> next; public Node(T value){ this(value,null); } public Node(T value,Node next){ this.next=next; this.value=value; } } public Node getKth(Node head,int k){ Node a=head,b=head; for(int i=0;i<k-1;i++){ b=b.next; } while(b.next!=null){ a=a.next; b=b.next; } return a; } public static void main(String[] args){ Node<String> a=new Node<String>("A"); Node<String> b=new Node<String>("B"); Node<String> c=new Node<String>("C"); Node<String> d=new Node<String>("D"); Node<String> e=new Node<String>("E"); a.next=b; b.next=c; c.next=d; d.next=e; ReverseKth list=new ReverseKth(); Node result=list.getKth(a,2); System.out.println(result.value); } }
相关文章推荐
- 链表中倒数第k个元素
- 查找一个单向链表中倒数第K个元素
- 查找链表中倒数第k个节点元素
- 链表的倒数第k个元素(mark)
- 求链表倒数第k个元素
- Interview----链表的倒数第K个元素
- Remove Nth Node From End of List --移除链表中的倒数第k个元素
- Interview----链表的倒数第K个元素
- 找单链表中倒数第K个元素
- 链表中倒数第K个元素,
- 【剑指offer】打印链表倒数第k个元素
- 寻找单链表中倒数第k个元素
- 取单链表倒数第k个元素
- 如何找到链表的倒数第k个元素
- 程序员面试题目总结--链表(2)【找出单链表中的倒数第K个元素】
- 输出链表倒数第k个元素
- 查找单链表中倒数第k个元素
- 【100题】找出链表倒数第k个元素
- 尾插法、头插法创建链表、链表反转、链表分段反转、查找链表倒数第k个元素,查找链表中间元素
- 输出单向链表的倒数第K个元素