单链表之逆序打印

  主要的思路是新定义两个节点指针,分别指向此时操作节点的前一个和后一个节点。然后通过操作这两个指针来实现逆序链表。即每次都操作一个新的头,通过操作这个"头结点"的前一个指针和后一个指针来实现断线和新的连接(连接前一个)。

主要代码段:

  next_ptr = head->next;//因为后面要修改头结点的next所以先保存起来,以便断了之后操作头结点后面的节点

  head->next = pre;//改变指向,指向前一个节点

  pre = head;//让"头结点"作为下一个节点成为断了之后要重新向前连结的节点的位置

  head = next_ptr;//更新新的"头"

  比如有这么一个单链表


但是这么做会有一个问题,就是不便于我们原始带有头结点的操作,所以上述循环代码段可以不从头结点开始操作,而是从头结点的下一个操作。即定义一个Node* p = head->next;上述循环代码段中的head换成p,最后循环结束时,pre 是指向第一个节点的,故让head->next = pre;pre = head;return pre;即可。

  完整代码:

Node* ReverseLink(Node* head){

    Node* pre = NULL;
    Node* p_next;
    Node* p = head->next;
    while(p!=NULL){
        p_next = p->next;
        p->next = pre;
        pre = p;
        p = p_next;
    }
    head->next = pre;
    pre = head;
    return pre;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值