使用C语言递归方法打印链表的最后k个节点


任务是从链表的末尾打印k个节点,使用递归方法。

递归方法是一种函数不断调用自身直到满足条件的方法,因此会存储结果。

例如,链表包含节点29、34、43、56和88,k的值为2,则输出将是最后的k个节点,即56和88。

示例

Linked List: 29->34->43->56->88
Input: 2
Output: 88 56

如前所述,应使用递归方法,该方法将从末尾遍历列表,跟踪需要遍历列表的次数,并且递归函数将由指针变量调用,直到第k个值。

以下代码显示了给定算法的C语言实现。

算法

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 -> Declare function as node* get(int data)
      Create newnode using malloc function
      Set newnode->data = data
      Set newnode->next = NULL
      return newnode
   step 3 -> Declare function void lastval(node* head, int& count, int k)
      IF !head
         Return
      Set lastval(head->next, count, k)
      Set count++
      IF (count <= k)
         Print head->data
   Step 4 -> In Main()
      Generate head using node* head = get(11)
      Set k and count to 0
      Call lastval(head,k,count)
STOP

示例

#include<stdio.h>
#include<stdlib.h>
// Structure of a node
struct node {
   int data;
   node* next;
};
// Function to get a new node
node* get(int data) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = data;
   newnode->next = NULL;
   return newnode;
}
//print the last k values of a node
void lastval(node* head, int& count, int k) {
   if (!head)
      return;
   lastval(head->next, count, k);
   count++;
   if (count <= k)
      printf("%d ", head->data);
}
int main() {
   node* head = get(11); //inserting elements into the list
   head->next = get(243);
   head->next->next = get(321);
   head->next->next->next = get(421);
   head->next->next->next->next = get(522);
   int k = 2, count = 0;
   printf(" last %d nodes of a list are :",k);
   // print last k nodes
   lastval(head, count, k);
   return 0;
}

输出

如果运行以上程序,它将生成以下输出。

last 2 nodes of a list are :522 421

更新于:2019年8月22日

浏览量:117

开启你的职业生涯

完成课程获得认证

开始学习
广告