今天带来的题目解析是leetcode206,反转链表,我们来看下题目描述
如何实现链表的反转呢?我在这里提供的思路是双指针的思路。
具体的思路如下:
假设我们的原链表如下
首先定义一个指针pre,用于指向head之前的位置,那么我们初始可以将它置为NULL因为链表反转之后第一个节点的next就是null。
也就是如下图所示。
我们首先定义cur用于指向head,我们要进行反转链表首先,要先将cur.next的位置用临时节点进行保存,也就是上图的temp,然后是将cur.next赋值给pre节点,然后将pre和cur后移,继续遍历链表。
这里需要注意的是,也就是pre和cur后移时
这两行代码的位置是先将pre=cur,然后是将cur=temp;假如交换这两行代码的位置就会导致后续pre=cur时赋值的是错误的cur位置。
最后将pre进行返回即可。
具体的代码如下
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
//pre指针一直在cur前面
ListNode pre = null;
//定义临时节点主要是存放cur.next节点。
ListNode temp=null;
while (cur!=null){
//用临时节点存放cur.next
temp=cur.next;
//将cur的next指向pre
cur.next=pre;
//移动pre和cur位置
pre=cur;
cur=temp;
}
return pre;
}
}
那么本次题目解析就到这里结束了,希望对你有帮助!