单链表的逆序----简单实现

给出无环单链表,请将之逆序,即原链表元素位A->B->C->D->E->F,逆序之后位F->E->D->C->B->A.

链表的数据元素结构:

struct node{

    int date;

    struct node *next;

};

static struct node *head = NULL;链表的头指针,全局变量

链表节点元素的创建函数:

struc node *create_node(int num)

{

    struct node *p = (struct node *)malloc(sizeof(*p));

    p->date = num;

    p->next = NULL;

    return p;

}

链表元素的插入方式为头部插入(即每新增的元素总是在最前面),插入函数:

void insert_node(struct node *p)

{

    p->next = head;

    head = p;

}

链表元素的删除方式也为头部删除(即每次从最前边删除一个元素),删除函数:

struct node *delete_node(void)

{

    struct node *tmp;

    tmp = head;

    head = head->next;

    return tmp;

}


当我们通过create_node(num)和insert_node(p)不断的创建和插入新节点后,一条无环单链表便构建好了.现在要将链表逆序,通过观察链表的增加和删除函数,可以看到它的操作很像栈,即后入先出,这样我们可以把链表的每个元素都取出来,再重新插入一次,最先的元素就到了最后,最后的元素就放到了最前边,这样就实现了逆序.

逆序函数如下;

void reserve_link(void)

{

    struct node *p = head;   //p指向链表首个元素

    head = NULL;     //头指针置空

    struct node *tmp =NULL;

    while(p){

        tmp = p;

        p = p->next;    //这两句,不断取出首个元素,头指针后移,既是删除操作

        tmp->next = head;

        head = tmp;     //这两句,不断从头部插入元素,既是插入操作

    }

}


另一种思路;用三个struct node *指针,一个用于取元素,一个用于修改next指向,另一个用于在链表上移动.思路略显复杂,条理分明的同学可以试试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值