剑指 Offer 24. 反转链表
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路:
- 设置两个指针,curr 指向链表头节点,prev 指向空
- 暂存 curr 的后继节点,next = curr.next
- 将 curr.next 反指向prev
- 将 prev 指向 curr,即 prev 指针后移
- 将 curr 指向 2 中暂存的 next 节点,即 curr 指针后移 循环 第 2 到 5 步,直到 curr 遍历完整个链表
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode curr = head;
ListNode prev = null;
ListNode next;
while (curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}