首页 > 解决方案 > 使用递归反向单链表

问题描述

struct node{
    int i;
    struct node* link;
};
struct node* head;
void reverse(struct node* prev, struct node* cur){
    if(cur){
        reverse(cur,cur->link);
        cur->link = prev;
    }
    else
        head = prev;
}
void main(){
    reverse(NULL,head);
}

在上面的代码中,如何将数据(作为输入的数字列表)插入到 SLL 中?,以便我了解在给出输入时元素是如何反转的,通过显示它,以及我应该在 main( ) 这样做?,因为它是递归的。

标签: csingly-linked-list

解决方案


使用给定的声明,此代码将构建一个用于测试的小列表,调用函数,然后打印结果列表:

int main(void)
{
  struct node a, b, c, d;
  a.i = 1;
  a.link = &b;
  b.i = 2;
  b.link = &c;
  c.i = 3;
  c.link = &d;
  d.i = 4;
  d.link = NULL;

  reverse(NULL, &a);

  for (const struct node *iter = &a; iter != NULL; iter = iter->link)
    printf("%d\n", iter->i);

  return 0;
}

推荐阅读