解答
思路:
读题(反射)
单向链表,直接设结点 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;
}
帖子还没人回复快来抢沙发