• 寻找链表的倒数第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的取值不合理的时候:

    链表为空的时候:

  • 相关阅读:
    Pull Request
    选择器
    常见HTTP状态码
    286. Walls and Gates
    200. Number of Islands
    1. Two Sum
    名片管理系统(python实现)
    k近邻算法(简单版)
    基数排序
    递归算法的调试
  • 原文地址:https://www.cnblogs.com/ldjhust/p/3053158.html
Copyright © 2020-2023  润新知