定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
注意:本题与主站 206 题相同:https://leetcode-cn.com/problems/reverse-linked-list/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof
解题思路
这道题题面是相当的简单,代码量也是很小,但确实要弄明白怎么反转,说白就是控制指针,做之前在纸上把图画明白对解题很有帮助。
我提交了两种解法,思路稍有不同,但基本思路是一致的就是把当前指针的next指向前一个节点,为了保证链条不断掉,记得要保存正序下当前节点的下一个节点。
- 生成一个为null 的Pre 前置节点,将头节点设为当前节点 Cur
- 首先保存当前节点Cur的下一个节点为 Next
- 将当前节点的next指向前一个节点 Pre,即当前节点反转
- 调整指针,使前置节点Pre变成反转后的最新节点,当前节点指向原来的下一个节点。
直至所有节点反转完成。
/**
* 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 Cur = head;
while(Cur != null){
//保存当前节点的下一个节点
ListNode Next = Cur.next;
//反转当前节点
Cur.next = Pre;
// 调整指针
Pre = Cur;
Cur = Next;
}
return Pre;
}
}