题目描述
输入一个链表,反转链表后,输出新链表的表头。
//listNode的定义
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
思路
总共需要三个指针:
(1)current:指向当前节点,用于遍历整个链表。
(2)preNode:指向当前节点的前一个节点,用于反转链表,通过更改当前节点的next指针来完成链表反转:current.next=preNode
(3)nextNode:指向当前节点的下一个节点,由于反转链表会更改原来节点中存储的next指针所指向的值,所以需要用一个临时的指针保存当前节点的下一个节点,在完成反转之后,可以通过current=nextNode来继续遍历链表。
图解
Step1:初始化节点:
current=head;
proNode=null;
Step2:反转第一个节点,并把所有指针向链表后移一位
通过循环的方式完成链表上所有节点的反转
代码
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode current=head;
ListNode prenode=null;
while(current!=null){
ListNode nextNode=current.next;
current.next=prenode;
prenode=current;
current=nextNode;
}
return prenode;
}
}