题目:

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000

做题思路:

事先保存每个节点的前一个节点,随后在我们遍历链表的过程中,需要将当前节点的next 指针改为指向它的前一个节点

解题步骤:

  1. 设置两个指针,curr 指向链表头节点,pre 指向空
  2. 暂存 curr 的后继节点,next = curr.next
  3. 将 curr.next 反指向pre
  4. 将 pre 指向 curr,即 pre 指针后移
  5. 将 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 pre = null;
        ListNode curr = head;
        ListNode next;
        while (curr != null)
        {
           next = curr.next;
           curr.next = pre;
           pre = curr;
           curr = next;
        }
        return pre;
    }
}