单链表反转 悠悠 2022-03-09 11:26 363阅读 0赞 单链表的翻转是一道很基本的算法题。 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用三个指针遍历单链表,逐个链接点进行反转。 方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 方法1的问题是浪费空间。方法2和方法3效率相当。一般方法2较为常用。 方法2代码: Node * ReverseList(Node *head) { Node *p1,*p2,*p3; if(head==NULL||*head==NULL) return head; p1=head; p2=p1->next; while(p2) //注意条件 { p3=p2->next; //要改变p2->next的指针,所以必须先保留p2->next p2->next=p1; p1=p2; //循环往后 p2=p3; } head->next=NULL; //原先的head已经变成tail,别忘了置空,只有到这步才能置空 *head=p1; return head; } 方法3代码: Node* ReverseList(Node* head) { Node *p,*q; p=head->next; while(p->next!=NULL) //在这个循环过程中p所指的元素一直是不变的 { q=p->next; p->next=q->next; q->next=head->next; head->next=q; } p->next=head; //相当于成环 head=p->next->next; //新head变为原head的next p->next->next=NULL; //断掉环 return head; } 附加一道题目,《编程之美》的3.4:从无头链表中删除节点。假设有一个没有头指针的单链表。一个指针指向此链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除。 分析:无法知道前续的节点,只能知晓后续节点,所以存在一个难点,如何将前后两段连接起来。由于链表是要删除操作,所以多处一个可用空间。所以可以用翻转操作方法1的思想来解决。将需要删除节点的节点复制为其后续节点就可以了,这样后续节点已经不再链表中,可以进行析构。
相关 单链表反转 常常面试我们会遇到考察列表反转的问题 如 1-->2-->3-->4-->5-->null这样的一个链表进行反转成为 null<--1<--2<--3<--4<--5 川长思鸟来/ 2023年06月25日 06:01/ 0 赞/ 2 阅读
相关 单链表反转 class Node{ int value; Node next; public Node(int value){ 淩亂°似流年/ 2023年06月24日 14:25/ 0 赞/ 2 阅读
相关 反转单链表 [https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&rp=1&ru=%2Ft 本是古典 何须时尚/ 2022年11月30日 01:46/ 0 赞/ 308 阅读
相关 单链表反转 include<iostream> using namespace std; typedef struct node { i 刺骨的言语ヽ痛彻心扉/ 2022年09月18日 04:47/ 0 赞/ 277 阅读
相关 单链表反转 public Node reverse(){ Node pReverseHead=null; Node pNode=head;//当前结点开始为 痛定思痛。/ 2022年08月10日 13:46/ 0 赞/ 305 阅读
相关 单链表反转 把每次翻转看成左右两个部分的翻转,比如第一次翻转时把左边的第一个节点看成左部分,把右边的第二个节点看成右部分,来进行翻转,第二次翻转时把左边的两个节点看成一个左部分,右边的第三 本是古典 何须时尚/ 2022年08月09日 01:55/ 0 赞/ 289 阅读
相关 反转单链表 前插 class ListNode { int val; ListNode next; ListNode(i Bertha 。/ 2022年08月04日 04:18/ 0 赞/ 306 阅读
相关 反转单链表 一、反转单链表 //反转单链表链表 class ListNode { int val; ListNode next = n Bertha 。/ 2022年05月26日 06:11/ 0 赞/ 280 阅读
相关 反转单链表 ![这里写图片描述][70] //解法一:反转链表 public ListNode reverseList(ListNode head){ 以你之姓@/ 2022年05月23日 04:36/ 0 赞/ 324 阅读
相关 单链表反转 单链表的翻转是一道很基本的算法题。 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用三个指针遍历单 悠悠/ 2022年03月09日 11:26/ 0 赞/ 364 阅读
还没有评论,来说两句吧...