在C语言中打印链表的反转而不实际反转


本任务是使用递归函数打印给定链表的反转。程序必须打印反转,但不反转列表,这意味着节点的顺序保持不变。

在这里,程序将移动包含第一个节点地址的头指针到下一个节点,直到检查到存储在列表最后一个节点中的NULL,并打印头节点的数据。

示例

Input: 29 34 43 56
Output: 56 43 34 29

首先,节点被插入到列表中,一个指针将开始指向被插入的节点。创建最终列表后,假设temp指针将用第一个节点指针初始化,它会一直递增,直到节点的下一个地址为NULL(因为最后一个节点不指向任何内容),然后从最后一个节点遍历到头指针。它将显示列表的反转,而实际上并没有反转列表。

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

算法

START
   Step 1 -> create node variable of type structure
      Declare int data
      Declare pointer of type node using *next
   Step 2 ->Declare function void reverse(node* head)
      IF head == NULL
         return
      Call reverse(head->next)
      Print head->data
   Step 3 -> Declare Function void push(node** header, char newdata)
      Allocate memory using malloc
      Set newnode->data = newdata
      Set newnode->next = (*header)
      Set (*header) = newnode
   Step 4 ->In Main()
      Create list using node* head = NULL
      Insert elements through push(&head, 56)
      Call reverse(head)
STOP

示例

#include<stdio.h>
#include<stdlib.h>
//creating structure for a node
struct node {
   int data;
   node* next;
};
//function to print reverse of the data in the list
void reverse(node* head) {
   if (head == NULL)
      return;
   reverse(head->next);
   printf("%d ", head->data);
}
//function to puch the node in the list
void push(node** header, char newdata) {
   struct node* newnode = (struct node*)malloc(sizeof(struct node));
   newnode->data = newdata;
   newnode->next = (*header);
   (*header) = newnode;
}
int main() {
   node* head = NULL;
   push(&head, 56); //calling function to push 56 in the list
   push(&head, 43);
   push(&head, 34);
   push(&head, 29);
   reverse(head);
   return 0;
}

输出

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

reverse of a linked list 56 43 34 29

更新于:2019年8月22日

269 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告