求链表中倒数第k个结点-Java实现

来源:互联网 发布:如何看龙虎榜数据 编辑:程序博客网 时间:2024/06/04 21:14
/*需求:求链表中倒数第k个结点思路:需要有两个指针,第一个指针先走k-1步,然后两个指针一起走当第一个指针走到链表结尾时,第二个指针到达倒数第k个结点解法:1,Java如何定义链表?链表是一个类,属性包括头结点和结点总数(此处必须考虑这个属性,因为需要跟k比较)每个结点又是一个类,属性包括数据域和指向下一个结点的引用2,创建一个链表3,求倒数第k个结点*///结点类class Nod{public int data;//定义结点数据域public Nod next=null;//定义指向下一个结点的引用public Nod(int data){this.data=data;}}//链表类class LinkList{public Nod head=null;//初始化链表头结点为空private int nodeCount;//定义链表结点总数//增加结点public void addNod(int d){Nod newNode=new Nod(d);//若头结点为空,则让新增加的结点作为头结点if (head==null){head=newNode;nodeCount++;return;}//头结点不为空时,找到链表最后一个结点,在其后增加新节点Nod temp=head;while (temp.next!=null){temp=temp.next;}temp.next=newNode;nodeCount++;}//获取链表结点总数public int getCount(){return nodeCount;}}class  FindKthToTail{public static Nod findKthToTail(int k){if (k==0){System.out.println("k不能为0!");return null;}//创建链表LinkList ll=new LinkList();ll.addNod(1);ll.addNod(2);ll.addNod(3);ll.addNod(4);ll.addNod(5);ll.addNod(6);int count=ll.getCount();//判断链表是否为空if (count==0){System.out.println("链表为空!");return null;}//判断链表结点总数和k的关系if (k>count){System.out.println("k大于链表结点总数!");return null;}//第一个引用先走k-1步Nod p1=ll.head;for (int i=0;i<k-1 ;i++ ){p1=p1.next;}//两个引用一起走,知道第一个引用走到链表末尾Nod p2=ll.head;while (p1.next!=null){p1=p1.next;p2=p2.next;}return p2;}public static void main(String[] args) {Nod k=findKthToTail(0);System.out.println("data:"+k.data);}}


                                             
0 0
原创粉丝点击