当前位置: 首页 > 知识库问答 >
问题:

如何以相反的顺序打印单链表?

颛孙信厚
2023-03-14
struct node
{
  int info;
  struct node *next;
};
typedef struct node node;

void *printRev(node *head){
      int count=0;
      int i;
      node *beforeFin;
      node *tempHead;
      tempHead = head;

      while(tempHead->next != NULL){
          count++;
          tempHead->next = tempHead->next->next; //LAST ITERATION SHOULD BE AT THE END OF LIST
      }
      printf("COUNT IS: %d\n", count);
      for(i = 0; i <= count; i++){
        beforeFin = Prev(head, tempHead->next);
        printf("%d", beforeFin->info);
      }
      printf("\n");
    }
COUNT IS: 3
Segmentation fault (core dumped)

我将感谢任何帮助,我是一个初学者,因为你可能会告诉。提前谢谢大家!

我可以用递归来做这个,但我想学习弄清楚这个方法。

共有1个答案

冯星剑
2023-03-14

要以相反的顺序打印单个链表,可以使用递归函数。您必须单步执行递归到最后,并在离开递归函数之前打印列表的元素:

void printReverse(node *act)
{
    if ( act == NULL )          // terminate if end of list is reached
        return;

    printRev( act->next );      // print next node 
    printf( "%d ", act->info ); // print this node
}

如果不想使用递归,当然可以反转列表,然后打印列表,最后再反转一次。

反转列表并不难。遍历列表,获取每个元素,并在列表头部的前面对其重新排序。

node * reverse(node *head)
{
  node *act, *prev;
  if ( head == NULL )
      return;

  prev = head;
  act = head->next;
  while ( act != NULL )
  {
      prev->next = act->next;
      act->next = head;
      head = act;
      act = prev->next;
  }
  return head;
}

void printReverse(node *head)
{
    node *act;

    act = reverse(head);
    while ( act != NULL )
    {
      printf( "%d ", act->info ); // print this node
      act = act->next;
    }
    reverse(head);
}
 类似资料:
  • 要以相反的顺序打印数组,我们应事先知道数组的长度。 然后我们可以从数组的长度值开始迭代到零,并且在每次迭代中我们可以打印数组索引的值。 该数组索引应直接从迭代本身派生。 算法 (Algorithm) 让我们首先看看该程序的逐步程序应该是什么 - START Step 1 → Take an array A and define its values Step 2 → Loop for

  • 问题内容: 我有一个LinkedHashMap: 我需要从给定键的位置向后迭代。因此,如果为我提供了第十个项目的密钥,则需要向后迭代哈希表9、8、7等。 问题答案: 您不必遍历它。但是拔下钥匙并将其存储在列表中会很方便。这就是执行indexOf()类型操作的唯一方法。

  • 问题内容: 我尝试了一个小时,但没有找到任何最佳方法来实现反向的哈希图迭代,这就是我拥有的哈希图。 我也看过TreeMap的例子, 但是treemap也按升序给出,我想要的是降序。 问题答案: Hashmap没有特定的顺序。但是您可以使用TreeMap。 也许这个简单的例子可以帮助您:

  • 问题内容: 该程序输出- 它不应该提供输出- 因为首先ai应该打印1,然后执行a.getI()并应该打印A 2 问题答案: 在此表达式中: 首先评估对的调用,然后通过连接加号形成字符串

  • 问题内容: 当我编写或或时,Python不会打印反斜杠符号。相反,它会为前两个错误,并为第二个打印。如何打印反斜杠? 问题答案: 你需要在反斜杠之前加上另一个反斜杠来转义: 对于Python 3之前的版本: 该字符称为转义字符,它以不同的方式解释其后的字符。例如,n它本身只是一个字母,但是当你在其前面加上反斜杠时,它变为,即newline字符。 你可能已经猜到,还需要转义,因此它不像转义符那样起作