题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
分析:芜湖,经典题目.头插法,原理是重新创建一个Null结点pre,然后把要反转的链表的第一个结点cur插入到该结点pre之后,然后把cur结点往后移一位,重复上述过程。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
//申请节点,pre和 cur,pre指向null
ListNode pre = new ListNode();//这里不要定义null,因为头插法中要用pre.next
ListNode cur = head;
ListNode tmp = null;
while(cur!=null) {
//记录当前节点的下一个节点
tmp = cur.next;
//然后将当前节点指向pre,这里其实就是用了链表基本操作的插入hhh
cur.next = pre.next;
//pre和cur节点都前进一位
pre.next = cur;
cur = tmp;
}
return pre.next;
}
}