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

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

解答

思路:

读题(反射)

单向链表,直接设结点 Node head; 要倒转就需要重置链接,设记忆结点 Node p

空间复杂度为O(1) ,就是不能使用新的空间-》一边遍历,另一边不断加结点

只能通过指针的指向重置来完成反转,How??

对大部分算法试题,没有思路的情况下

都可以通过从最小集推导出做题思路

*(直接考查数据结构特性除外)

1、空间思路为O(1),则不能使增加空间排序的方法,只能通过变换指针指向完成倒排。

2、要求时间复杂度低,就不能使用最慢的O(n²)来遍历找到对应的位置

3、因为要变换指针,不管三一二十一,先在纸上定义中断结点Node*p

代码

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 0条回复 评论

帖子还没人回复快来抢沙发