链表反转技巧口诀
1、以p2节点为根,把p2节点原本指向p3的next指针反转,指向p1;
2、三个临时节点引用p1,p2,p3分别向后移动一位;
3、重复”1”的工作,以p2节点为根,把p2节点原本指向p3的next指针反转,指向p1;
4、重复”2”的工作,三个临时节点引用p1,p2,p3分别向后移动一位;
5、继续重复以上的工作,一直到p2为空为止;
6、最后,把head节点的next指向空,成为反转链表的尾节点。并把p1赋值给head,让p1所在节点成为反转链表的头节点;
c++大神!怎么理解链表这个反转函数
首先p是Shape这个类的指针,指向当前元素q是复制p的指针,用于反转链表位置r是上一个位置的指针while(p)即while(p!=NULL),说明没有到链表的结束(NULL)r=q就是复制q的值,即上一个位置的指针q=p是复制当前的地址p=p->next是将p向后移动q->next=r是将q指向r,即后一个指向前一个,实现反转的功能在最后,就是p=NULL的时候,q仍保存着链表的末尾,这时将head替换成q,将链表头换成链表尾,结束整个反转
什么情况下用链表逆置
链表逆置通常用于需要对链表进行反向遍历或者改变链表顺序的情况。例如,在某些算法中需要对链表进行逆序操作,或者在某些应用中需要将链表按照一定规则重新排序。
另外,链表逆置也可以用于优化链表的访问效率,将链表中经常访问的节点放到靠近头部的位置,可以减少遍历次数,提高效率。总之,链表逆置是一种常见的链表操作,可以帮助我们更好地处理链表数据。
BST好用吗
有人认为BST(Binary Search Tree,二叉搜索树)是一种非常有用的数据结构,因为它具有以下特点:
1. 快速插入和删除:BST的插入和删除操作的平均时间复杂度为O(log n),它通过比较节点的值来确定插入和删除的位置,这样可以快速找到应该插入或删除的位置。
2. 排序和查找:BST的中序遍历可以按顺序输出所有节点的值,因此BST可以用于对元素进行排序。同时,BST的查找操作的平均时间复杂度也为O(log n),比线性查找效率更高。
3. 空间效率:BST的空间复杂度为O(n),其中n是BST中存储的元素个数。相比于其他数据结构,如数组或链表,BST可以在相对较小的空间中存储大量元素。
然而,BST的使用也有一些限制和问题:
1. 平衡性:如果BST不平衡,即左子树和右子树的高度差过大,会导致插入、删除和查找操作的时间复杂度变为O(n),失去了BST的优势。为了保持平衡性,人们通常使用平衡二叉搜索树(如AVL树、红黑树等)。
2. 数据分布不均:如果BST中的数据分布不均,即插入的数据趋向于有序或完全逆序,BST的性能会降低,因为此时BST退化成了链表。
综上所述,BST是一种常用且有用的数据结构,但它也有一些限制和问题。在实际应用中,需要根据具体场景来选择合适的数据结构。