zoukankan      html  css  js  c++  java
  • 【数据结构】链表的逆置(图文)

    前言

    输入的是一条带有头结点的链表L 故头结点为L,第一个节点为L->next.

    先上代码

    void Reverse(LinkList *L)
    {
        LinkList  *p,*q;
        p = L->next;
        L->next = NULL;
        while(p!=NULL)
        {
            q = p;
            p = p->next;
            q->next = L->next;
            L->next = q;
        }
    
    }
    

    讲解(摘自:链表逆置详细讲解(图文)

    我们先看第一轮循环做了什么:

    建议阅读顺序:黑色(初始)、蓝色(操作)、红色(理解)
    image

    第二轮:

    建议阅读顺序:黑色(初始)、蓝色(操作)、红色(理解)
    image

    第三轮:

    就是头插法

    就是头插发

    就是头插发

    最后给一份带注释的代码~

    void listReverse(linkedList &L)
    {
    	node *p,*s;
    	//1.准备工作
    	p = L->next;
    	L->next = NULL;
    	
    	while(p)
    	{
    		//2.1 s记录正在处理的结点,p记录下一轮待处理的结点
    		s = p; 			//s承接上一轮记录的位置
    		p = p->next; 	//p为下一轮记录位置
    		//2.2 把s插入 已逆置的部分 中
    		s->next = L->next;  // L->next代表已逆置的第一结点,s的指针域指向它
    		L->next = s;	//(头结点的指针域,即)第一结点 设置为s
    		//2.2步骤相当于:
    		//s 对 队伍(已逆置部分)的队首(已逆置的第一结点)说:你不要排在柜台前了,你排在我后面
    		//等队伍排在s后面后,s自己排到了柜台前
    	}
    }
    
  • 相关阅读:
    魏新 20191017-1 每周例行报告
    魏新 20191010-2 每周例行报告
    魏新 20190919-1 每周例行报告
    魏新 20190919-3 效能分析
    总结
    感谢信
    20191024-1 每周例行报告
    20191017-1 每周例行报告
    第三周作业03
    第三周作业1
  • 原文地址:https://www.cnblogs.com/zhujiaozhu/p/15389234.html
Copyright © 2011-2022 走看看