zoukankan      html  css  js  c++  java
  • 寻找链表的倒数第K个节点

    题目:输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0 个结点为链表的尾指针。

    链表数据结构定义如下:

    1 struct LISTNODE
    2 {
    3     int nData;
    4 
    5     LISTNODE *next;
    6 };

    思路:用两个指针,第一个指针先走k步,然后第二个指针指向第一个节点,开始和第一个指针一起往后走。

    注意:1、我假设这个链表有头节点,若要求链表无头节点,则代码需做修改,但核心思想是一样的

       2、注意k的范围,对于k的各种取之给一个合适的反馈。

    基于以上分析,写出代码:

     1 LISTNODE *GetLastKNode(LISTNODE *head, int k)
     2 {
     3     assert (head != NULL);
     4 
     5     assert (k >= 0);
     6 
     7     LISTNODE *pPre = head->next;
     8 
     9     if (NULL == pPre)
    10     {
    11         cerr << "空链表" << endl << endl;
    12         exit (1);
    13     }
    14 
    15     if (0 == k)
    16     {
    17         cout << "链表倒数第 " << k << " 个节点是尾指针.\n" << endl;
    18         exit (0);
    19     }
    20 
    21     while ((pPre != NULL) && (k > 0))
    22     {
    23         pPre = pPre->next;
    24         --k;
    25     }
    26 
    27     if (k > 0)
    28     {
    29         cout << "K的值大于链表节点的个数.\n\n";
    30         exit (1);
    31     }
    32 
    33     LISTNODE *pLast = head->next;
    34 
    35     while (pPre != NULL)
    36     {
    37         pPre = pPre->next;
    38         pLast = pLast->next;
    39     }
    40 
    41     return (pLast);
    42 }

      下面是一些测试结果:

    k的取之很合理的时候:

    k取值为0的时候:

    K的取值不合理的时候:

    链表为空的时候:

  • 相关阅读:
    第一次作业
    java基础随笔09
    java基础随笔08
    java基础随笔07
    java基础随笔06
    java基础随笔05
    java基础随笔04
    java基础随笔03
    java基础随笔02
    java基础随笔01
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3053158.html
Copyright © 2011-2022 走看看