题目描述
输入一个链表,反转链表后,输出新链表的表头。
解题思路
- 首先想到的是让结点的指针指向他的前一个结点,但是指针方向变化,就不能寻找到他的下一个结点,所以要定义一个结点保存住当前节点后面的节点;
- 我们操作一个结点的话 需要 他的前一个结点,同时还要保存住后边的节点
代码
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null){
return null;
}
if(head.next==null){
return head;
}
ListNode reversedHead=null;//节点变量存放反转后的头结点
ListNode cur=head;//cur是当前操作的节点
ListNode before=null;//前一个节点 头结点的前一个结点为空
while(cur!=null){
ListNode next=cur.next;//节点变量保存住当前节点的一个结点
if(next==null){
reversedHead=cur;//说明当前节点就是尾节点,也就是反转后的头结点
}
cur.next=before;//当前节点指向她的前一个结点
before=cur;//下一次操作的时候,当前节点就变为了前面的节点
cur=next;//下一次操作的时候,下一个结点就变为了当前节点
}
return reversedHead;
}
}