题目描述
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
创建虚拟结点辅助翻转
public ListNode reverseList(ListNode head)
{
ListNode dummy = new ListNode(-1);
ListNode suc; //后继结点
while(head != null)
{
//头插法
suc = head.next;
head.next = dummy.next; //把当前结点插在dummy和dummy的下一个结点(或null)之间
dummy.next = head; //让当前结点作为dummy的下一个结点
head = suc;
}
return dummy.next;
}
前驱后继法
public ListNode reverseList(ListNode head)
{
ListNode pre = null; //头结点的前驱是null
ListNode suc; //后继
while (head != null)
{
suc = head.next;
head.next = pre; //当前结点的后继更新为前驱
pre = head; //前驱后移一位
head = suc; //当前结点后移一位
}
return pre; //此时前驱指向原链表的尾结点,即反转链表的头结点
}