单链表之逆序打印

来源:互联网 发布:校园网络诈骗小品剧本 编辑:程序博客网 时间:2024/06/06 20:32

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

主要代码段:

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



原创粉丝点击