试题
考点

算法-链表算法-链表算法

面5笔5

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

前往“校招VIP”小程序,刷题更快
最新校招难题刷题,快来进刷题群吧
解答

思路:

读题(反射)

单向链表,直接设结点 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;     
}  




评论
暂无评论

加载更多