使用递归反向单个链表

时间:2018-06-25 07:33:37

标签: c singly-linked-list

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()中执行此操作?,因为它是递归。

1 个答案:

答案 0 :(得分:1)

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

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;
}