题目描述
输入一个链表,输出该链表中倒数第k个结点。
题目解答
方法一:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null || k<1){ return null; } ListNode cur=head; while(cur!=null){ k--; cur=cur.next; } if(k>0){ //1->2->3,k=4,k的变化:3,2,1,大于0,没有倒数第k个节点 return null; }else if(k==0){ //1->2->3,k=3,k的变化:2,1,0,等于0,就是头节点 return head; }else{ //k<0,1->2->3,k=2,k的变化:1,0,-1,小于0 cur=head; while(++k!=0){ cur=cur.next; } return cur.next; } } }
方法二:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null || k<1){ return null; } ListNode pre=head;//快指针 ListNode last=head;//慢指针 for(int i=1;i<k;i++){ if(pre.next!=null){//快指针先走k步 pre=pre.next; }else{ return null; } } while(pre.next!=null){//当快指针走到头的时候,慢指针指向倒数第k个节点 pre=pre.next; last=last.next; } return last; } }
快慢指针
原文地址:https://www.cnblogs.com/chanaichao/p/10121882.html
时间: 2024-11-08 16:55:49