定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
解题思路:
设 pre 和tmp为null,cur=head
1.tmp保存cur下一个值
2.让cur的下一个值指向pre
上面两步完成了前面第一个链的指向,接下来我们只要循环渐进,把pre指向cur,把cur 指向tmp(在前面的一步,保存了cur的下一个值),直到cur==null结束,返回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 tmp = null;
ListNode cur = head;
while (cur != null) {
tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}