校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 单向链表
题目

一个长度为n的单向链表,用O(1) 空间复杂度来实现倒转输出,使用最低时间复杂度

解答

空间复杂度为O(1),只能一次取一个结点,并把它的next结点指向第一个结点

具体分析,可以从1个结点入手,再到2个结点,3个结点



分析完后,需要4个结点,

1.当前循环结点 q

2.暂存结点p,用来记录q的下一个结点

3. 每次指针重定向后的链表的头结点newHead,也就是每次q.next所指向的结点

4. 原链表头结点head, head.next结点无指向,设为null


Node  reverse(Node head)   
{   
     if(head == null || head.next == null){
              return head;
     }
     Node newHead =head; //保持链表的首结点  
     Node q = newHead.next; Node p;//p是记录结点,先直接定义
    

     while(q != null)   {  
           p =q.next;   //保存结点
           q.next=newHead;   
           newHead = q;   //记录头指针
           q = p;   //继续下一个
       }   
       head.next=null;            
       head=tHead;        
       return head; 
}



C 3条回复 评论
凡人多烦事

面试官逮着我问内存溢出和内存泄露,k8s,测试前置,jekins集群的问题

发表于 2021-09-08 16:45:01
0 0
假期

33个指针做

发表于 2021-01-23 23:14:29
0 0
大葫芦

head结点是指向P, 还是一直空着啊

发表于 2021-01-23 10:39:32
1 1
dana :

空着就行,也就是不用处理,最后把head重置到链表开始就行

发表于 2018-10-13 14:15:38
回复