反转链表

现在有一个难题,对于一个单向链表,Mayuyu想通过修改指针将它进行反转。

 

嗯,对于这个问题,我们只需要考虑链表中当前的节点与它的前驱和后继的指针指向情况就可以了。这样我们对于每

一个当前的节点都做同样的操作,这样下去就可以修改所有的指针,把链表进行反转,时间复杂度为O(n)。

 

 

如上图,对于当前节点cur,我们必然要修改它的next指针,那么所以先把cur->next保存在一个临时变量tmp里,

然后接下来就应该调整cur与pre之间的指针了。既然是反转,那么应该把cur的next域设置为pre,然后再把pre和

cur都向右移动一个一步,即pre = cur, cur = tmp。当然循环条件是cur不为空。最后不要忘了把head重新设

置为pre,因为cur此时是NULL,那么pre必定是最后一个节点,所以最后一个节点变为head。

 

经过上述描述,很容易得到如下代码:

 

list *reverseList(list *head)
{
    assert(head);
    list *tmp;
    list *pre = head;
    list *cur = head->next;
    while(cur)
    {
        tmp = cur->next;
        cur->next = pre;
        pre = cur;
        cur = tmp;
    }
    head = pre;
    return head;
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值