本文共 3589 字,大约阅读时间需要 11 分钟。
查找单链表倒数第k个节点
思路
先获取链表的长度length,判断k的合法性,以及k的位置
要找的节点就在length-k处(视情况)
/** * 查找倒数第k个节点 * @param head 链表的头节点 * @param index 表示要查找结点的逆序下标 * @return 返回倒数第index个个点 */ public Node getK(Node head,int index){ if (head.next == null){ //链表为空 return null; } int length = getLength(head);//获取链表的长度 if (index <=0 || index > length){ //判断链表是否合法 System.out.println("index数据非法"); return null; } Node temp = head.next; //遍历到要找的位置 for (int i = 0; i < length-index; i++) { temp = temp.next; } return temp; }
/** * 获取单链表的长度 * @param head 单链表的头节点 * @return 返回单链表的有效长度 */ public int getLength(Node head){ if (head.next == null){ return 0; } int length = 0; Node temp = head.next; while(temp != null){ length++; temp = temp.next; } return length; }
package LinkedList.test;/** * @version 1.0 * @auther WangCode * @date 2021/4/3 16:08 */public class SingleLinkedListTest { public static void main(String[] args) { Node n1 = new Node(1, "123"); Node n2 = new Node(2, "23"); Node n3 = new Node(3, "3"); LinkedList linkedList = new LinkedList(); linkedList.add(n1); linkedList.add(n2); linkedList.add(n3); Node listK = linkedList.getK(linkedList.getHead(), 1); System.out.println(listK); }}//定义一个节点class Node{ public int no; public String data; public Node next; //构造方法 public Node(int no, String data){ this.no = no; this.data = data; } @Override public String toString() { return "Node{" + "no=" + no + ", data='" + data + '\'' + '}'; }}//创建单链表class LinkedList{ //初始化头节点 private Node head = new Node(0,""); public Node getHead() { return head; } /** * 添加节点 * @param node */ public void add(Node node){ Node temp = head; while (true){ if (temp.next == null){ //找到链表最后一个节点 break; } temp = temp.next; } temp.next = node;//在链表的最后添加新的节点 } /** * 遍历链表 */ public void list(){ Node temp = head.next; if (temp == null){ System.out.println("该链表为空"); return; } while(true){ if (temp == null){ break; } System.out.println(temp); temp = temp.next; } } /** * 获取单链表的长度 * @param head 单链表的头节点 * @return 返回单链表的有效长度 */ public int getLength(Node head){ if (head.next == null){ return 0; } int length = 0; Node temp = head.next; while(temp != null){ length++; temp = temp.next; } return length; } /** * 查找倒数第k个节点 * @param head 链表的头节点 * @param index 表示要查找结点的逆序下标 * @return 返回倒数第index个个点 */ public Node getK(Node head,int index){ if (head.next == null){ return null; } int length = getLength(head); if (index <=0 || index > length){ System.out.println("index数据非法"); return null; } Node temp = head.next; for (int i = 0; i < length-index; i++) { temp = temp.next; } return temp; }}
运行结果:
转载地址:http://xqqoz.baihongyu.com/