当你攥紧拳头的时候,你手里可能是空空如也,除了手汗,什么也拿不到;但是当你摊开双手的时候,清风可以涌入你的怀中,阳光可以聚拢在你的手心,你拥有的,将是整个世界的美好与诗意。
Leetcode原题
思路
这题听说还是字节、微软、美团阿里巴巴的热度题目。这题要求链表反转,也就是本来是前面指向后面的,现在要求后面的倒着指向前面.嗯,你是不是也想想会了,敲起了就不知道如何下手,没关系,我也是~~
迭代法
假设链表为 1—>2—>3.现在我们要改为3—>2—>1
在遍历链表时,将当前节点的 next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
具体代码如下:
public ListNode reverseList(ListNode head) {
ListNode pre =null;
ListNode curr= head;
while(curr!=null){
ListNode next= curr.next; //保留下一节点
curr.next =pre; //当前节点指向前一个节点
pre =curr; //前节点处理后,指针移动到当前节点
curr = next;// 当前节点往后移动
}
return pre;
}
另外一种递归的方法,我觉得比较复杂,不适合现在去了解。有兴趣的可以去看一下官网。提示
有兴趣的老爷,还可以关注我的公众号【一起收破烂】,回复【006】获取 最新java面试资料以及简历模型120套哦~