剑指offer24- 反转链表
简单
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
个人题解:
思路:将当前节点的指向反转,指向前一个节点,并将3个指针整体后移,从而反转整个链表
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// 设置三个指针
// pre 指向null
ListNode pre = null;
// curr指向第一个节点
ListNode curr = head;
// temp用来占存curr后一个节点,方便移位
ListNode temp = null;
// curr指向null停止
while(curr!= null){
// 先将curr的下一个节点即第二个节点存起来
temp = curr.next;
// 将第一节点指向pre,可以理解为“指向掉头”
curr.next = pre;
// 调完头开始移位,pre指向curr的节点
pre = curr;
// curr指向temp即后一个节点
curr = temp;
}
// 之所以返回pre,因为初始的pre为null,且最后pre指向的实为不等于null的最后一个节点
return pre;
}
}