题目描述
输入一个链表,反转链表后,输出新链表的表头。
链表结构:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
解题思路:
把链表地结点一个一个地拆下来,改变节点中next的方向,从而把链表变成倒序的。
步骤:
注:pre结点用于作为新链表的头结点
1.先把原链表中的头结点指向新定义的pre节点(在这里之前一定要先保存好原链表head结点的下个结点,避免head结点指向新定义的pre结点后找不到原链表)
2.把pre指针移动到head结点,让新接入的结点作为新链表的头结点。
3.把原链表中之前保存好的“下一个结点”作为原链表的头结点。
4.循环重复上面的步骤,把原链表中的头结点一个一个地连入新链表中(pre指针是每次移动到新连入的结点,以此作为头结点;head指针在每次循环最后都会移动到原链表的下个结点,让此作为原链表的头结点,而慢慢接入新链表中)
代码如下:
public ListNode ReverseList(ListNode head) {
ListNode pre= null;
ListNode next= null;
while(head!=null) {
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}