题目介绍
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例1:
输入:1->2->3->4->5
输出:5->4->3->2->1
示例2:
输入:1->2
输出:2->1
思路
step1:设定两个指针,一个cur指向当前结点,一个pre,指向当前的前驱结点
step2:给cur赋初值head,pre赋初值null
step3:只要cur结点不为空,都循环遍历链表。从第一个结点开始,开辟一个temp结点来记录cur原来的next域,然后把cur结点的next域指向pre结点,因为已经完成了当前结点的指针修改,所以把cur赋给pre,把原来cur的next即temp赋给cur,做下一次修改,即重复步骤三的操作,直到cur结点为空时,所有结点的next域都完成了修改,因此反转链表完成。
代码实现
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur=head; //从头结点开始修改
ListNode pre=null; //反转后,头结点的下一个结点应该为null
while(cur!=null){
ListNode temp=cur.next; //记录cur结点的next结点
cur.next=pre; //把当前结点的next域修改为前驱结点
pre=cur; //完成指针修改之后,把当前结点改成前驱结点
cur=temp; //把当前结点修改成一开始记录下的原来的next结点
}
return pre;
}
}