每天学习一算法【3】单链表翻转

每天学习一算法【3】单链表翻转

本文只说明一种方法。
例如链表 head->node1->node2->node3->node4->NULL;
翻转之后 head->node4->node3->node2->node1->NULL;

思路:
我们先定义三个节点:p,q,s;
其中,p是当前节点,s是下一个节点,q是上一个节点;
1.保存下一个节点,s = p->next;
2.把当前节点的下一个节点重新赋值为上一个节点,p->next = q;
3.现在,当前节点p要向下进行,当前节点也就变成了上一个节点,q = p;
4.把下一个节点赋给p,p = s;

void reverse(LinkList l){//head->1->2->3->4->...->NULL
    LinkList p = l->next;//p为当前节点
    LinkList s = NULL;//下一个节点
    LinkList q = NULL;//上一个节点
    while(p != NULL){
        s = p->next;
        p->next = q;
        q = p;
        p = s;
    }
    LinkList h = (LinkList)malloc(sizeof(Node));
    h->next = q;
    print(h);
}

完整代码戳这里;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值