您的位置:首页 > 其它

Q15:链表中倒数第K个结点

2016-07-28 22:47 477 查看
public
class
Q15 {
   /**
    *
题目:链表中倒数第K个结点
    *
题目说明:输入一个链表,输出链表中倒数第K个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如:一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6.这个链表的倒数第3个结点是值为4的结点。
    *
解题思路:为提高程序的健壮性,需要对特殊的条件进行判断。首先找到k的位置,通过两个下标只差相差k-1个,来控制要查找的结点,当到达最后一个结点时,前一个下标正好到达倒数第k个结点。
    */
   public
static void
main(String[] args) {
      ListNode head = new ListNode();
      ListNode second = new ListNode();
      ListNode third = new ListNode();
      ListNode forth = new ListNode();
      head.nextNode = second;
      second.nextNode = third;
      third.nextNode = forth;
     
      head.data = 1;
      second.data = 2;
      third.data = 3;
      forth.data = 4;
     
      Q15 test = new Q15();
      ListNode result = test.findKToTail(head,3);
      System.out.println(result.data);
   }
   public ListNode findKToTail(ListNode head,
int k){
      //合法性判断(表不为空,且要找的结点存在)
      if(head ==
null || k == 0){
         return
null
;
      }
      ListNode resultListNode =
null
;//用来存放倒数第K个结点
      ListNode headListNode = head;
      //循环找到第K个结点
      for(int i=0; i < k; i++){
         if(headListNode.nextNode !=
null){//保证第K个结点存在
            headListNode = headListNode.nextNode;
         }else {
            return
null
;
         }
      }
      resultListNode = head;
      while(headListNode !=
null){//当到达表结点的尾结点时,headListNode.nextNode为空,此时resultListNode为到数第K个结点。
         resultListNode = resultListNode.nextNode;
         headListNode = headListNode.nextNode;
      }
      return resultListNode;
   }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: