剑指 Offer II 024. 反转链表
给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
来源:LeetCode
看了其他的题解才明白,用双指针法进行解题。 定义当前节点是cur,它前面一个节点是pre,如果cur为head,那么pre就是null。 接下来让当前节点指向前一节点,也就是cur.next=pre; 但是由于cur的变化,所以需要记录一下cur的后一个节点,而且是在指向pre之前存储,即temp=cur.next; 然后将pre和cur均向前移动即可。pre=pre.next;cur=cur.next;直到cur指向末尾的null 最后应该返回pre,此时的pre就是最末尾的节点。
参考此博客解法1
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode temp = null;
while(cur != null){
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
链表其实懂了其中的原理好像也没那么难。
|