定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
注意:本题与主站 206 题相同:https://leetcode-cn.com/problems/reverse-linked-list/
Related Topics
遍历修改指针
修改指针
操作简单
- 把当前节点的
next
指向之前遍历的节点pre
,这是核心 - 因为进行了上一步操作之后下一个节点就找不到了,所以需要一个变量暂存一下修改之前的
next
指向 - 同时
pre
指向跟随遍历窗口移动到当前节点 - 同时需要把当前移动到原链表的下一个节点,也就是步骤(2)中记下的那个
- 到结束时遍历到原链表的结尾
null
节点,此时pre
指向为原链表的结尾非空那个节点,也就是翻转后的头结点
代码
class Solution {
public ListNode reverseList(ListNode head) {
if (null == head || head.next == null){
return head;
}
ListNode pre = null;
ListNode cur = head;
while (cur!=null){
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
发表评论