反转链表
题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
示例:输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
做题思路:
事先保存每个节点的前一个节点,随后在我们遍历链表的过程中,需要将当前节点的next 指针改为指向它的前一个节点
解题步骤:
- 设置两个指针,curr 指向链表头节点,pre 指向空
- 暂存 curr 的后继节点,next = curr.next
- 将 curr.next 反指向pre
- 将 pre 指向 curr,即 pre 指针后移
- 将 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;
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Zhn&Blog!
评论