## 题目

> - 题号：206
> - 难度：简单
> - https://leetcode-cn.com/problems/reverse-linked-list/

反转一个单链表。

<b>示例</b>:
```c
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
```

<b>进阶</b>:

你可以迭代或递归地反转链表。你能否用两种方法解决这道题？


---
## 实现

**思路：利用双指针的方式**

`p1`作为前面的指针探路，`p2`作为后面的指针跟进，顺着链表跑一圈，搞定问题。

**C# 语言**

- 状态：通过
- 27 / 27 个通过测试用例
- 执行用时: 116 ms, 在所有 C# 提交中击败了 97.50% 的用户
- 内存消耗: 23.3 MB, 在所有 C# 提交中击败了 5.26% 的用户

```c
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */

public class Solution
{
    public ListNode ReverseList(ListNode head)
    {
        if (head == null || head.next == null)
            return head;
            
        ListNode p1 = head;
        ListNode p2 = null;
        while (p1 != null)
        {
            ListNode temp = p1.next;
            p1.next = p2;
            p2 = p1;
            p1 = temp;
        }
        return p2;
    }
}
```

**Python 语言**

- 执行结果：通过
- 执行用时：36 ms, 在所有 Python3 提交中击败了 92.27% 的用户
- 内存消耗：14.6 MB, 在所有 Python3 提交中击败了 17.65% 的用户

```python
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if head is None or head.next is None:
            return head
        p1 = head
        p2 = None
        while p1 is not None:
            temp = p1.next
            p1.next = p2
            p2 = p1
            p1 = temp
        return p2
```

