反转单链表算法说明
1个回答
关注
展开全部
反转单链表算法说明您好亲, 1、迭代反转链表该算法的实现思想非常直接,就是从当前链表的首元节点开始,一直遍历至链表的最后一个节点,这期间会逐个改变所遍历到的节点的指针域,另其指向前一个节点。具体的实现方法也很简单,借助 3 个指针即可。以图 1 中建立的链表为例,首先我们定义 3 个指针并分别命名为 beg、mid、end。它们的初始指向。2、递归反转链表和迭代反转法的思想恰好相反,递归反转法的实现思想是从链表的尾节点开始,依次向前遍历,遍历过程依次改变各节点的指向,即另其指向前一个节点。鉴于该方法的实现用到了递归算法,不易理解,因此和讲解其他实现方法不同,这里先给读者具体的实现代码,然后再给大家分析具体的实现过程: link* recursive_reverse(link* head) {//递归的出口if (head == NULL || head->next == NULL) // 空链或只有一个结点,直接返回头指针{return head;} else{//一直递归,找到链表中最后一个节点link *new_head = recursive_reverse(head->next); //当逐层退出时,new_head 的指向都不变,一直指向原链表中最后一个节点;//递归每退出一层,函数中 head 指针的指向都会发生改变,都指向上一个节点。 //每退出一层,都需要改变 head->next 节点指针域的指向,同时令 head 所指节点的指针域为 NULL。head->next->next = head;head->next = NULL;//每一层递归结束,都要将新的头指针返回给上一层。由此,即可保证整个递归过程中,能够一直找得到新链表的表头。return new_head;}}希望我的回答对您有帮助,谢谢,祝您生活愉快!
咨询记录 · 回答于2022-10-05
反转单链表算法说明
反转单链表算法说明您好亲, 1、迭代反转链表该算法的实现思想非常直接,就是从当前链表的首元节点开始,一直遍历至链表的最后一个节点,这期间会逐个改变所遍历到的节点的指针域,另其指向前一个节点。具体的实现方法也很简单,借助 3 个指针即可。以图 1 中建立的链表为例,首先我们定义 3 个指针并分别命名为 beg、mid、end。它们的初始指向。2、递归反转链表和迭代反转法的思想恰好相反,递归反转法的实现思想是从链表的尾节点开始,依次向前遍历,遍历过程依次改变各节点的指向,即另其指向前一个节点。鉴于该方法的实现用到了递归算法,不易理解,因此和讲解其他实现方法不同,这里先给读者具体的实现代码,然后再给大家分析具体的实现过程: link* recursive_reverse(link* head) {//递归的出口if (head == NULL || head->next == NULL) // 空链或只有一个结点,直接返回头指针{return head;} else{//一直递归,找到链表中最后一个节点link *new_head = recursive_reverse(head->next); //当逐层退出时,new_head 的指向都不变,一直指向原链表中最后一个节点;//递归每退出一层,函数中 head 指针的指向都会发生改变,都指向上一个节点。 //每退出一层,都需要改变 head->next 节点指针域的指向,同时令 head 所指节点的指针域为 NULL。head->next->next = head;head->next = NULL;//每一层递归结束,都要将新的头指针返回给上一层。由此,即可保证整个递归过程中,能够一直找得到新链表的表头。return new_head;}}希望我的回答对您有帮助,谢谢,祝您生活愉快!
看看我的图,那才是我想问的
您好亲, publie void reverse (SinglyList list) (Hode> p = list. head. nert, suce = null, front = null.xhile (o I= null)(suce=p.xext;//设置xuce是p结点的后继结点,即用suec来保持p的后继结点p.next=front;//逆转;即使p.noxt指句p结点的前驱结点front=p://front向后移一步p=suce://p向后移-步3list.head.next=front;//head指向原链表的最后一个结点,完成逆转public class SinglyList_reverse (public static SinglyList ereatekeverse (T[] values) [SinglyList list = new SinglyList(values):retun list;}public static void main (String[] args) [Stringl] values = ("A", "B", "C", "D", "E", "T")SinglyList (String) list = ereatefererse(values):System. out. println ("list" + list. toString 0);Singlylist s = ner SinglyList O:s.reverse List)Systen. ort. println(",逆转后"+ list.toString0).希望我的回答对您有帮助,谢谢,祝您生活愉快!
我是问指针P front succ在图片中的作用
您好亲, 设置辅助指针。希望我的回答对您有帮助,谢谢,祝您生活愉快!
可能你还没回答我的问题
您好亲, 指针是辅助作用的。希望我的回答对您有帮助,谢谢,祝您生活愉快!
希望你分别说出他们的作用
您好亲, 1、指针就是指向一个特定内存地址的一个变量。C语言指针可以有效地表示复杂的数据结构、动态分配内存、高效的使用数组和字符串、使得调用函数时得到多个返回值等。指针的应用往往与数组联系在一起,是最频繁的,也是最基础的。在定义数组和函数时,系统会为其自动分配一个指向其首地址的指针。对于一个数组,其名称就是一个指针变量。2、指针只是一个变量,它存储一个内存地址。如果传入一个地址,比传入一个struct效率要高,因为少了一个拷贝过程。3、指针能够有效的表示数据结构,能动态分配内存、能较方便的使用字符串,有效的使用数组。4、指针直接与数据等的存储地址有关,是比较重要的。比如,值传递不如地址传递高效,因为值传递先从实参的地址中提出值,再赋值给形参带入函数计算;而指针则把形参的地址直接指向实参地址,使用时直接提出数据,使用效率高,特别在频繁赋值等情况下。希望我的回答对您有帮助,谢谢,祝您生活愉快!
我说的是我发的图片中具体的p front succ 指针的作用[汗
您好亲, front 指向p结点的前驱结点。 succ 指向p结点的后驱结点。希望我的回答对您有帮助,谢谢,祝您生活愉快!