反转链表
题目描述:
输入一个链表,反转链表后,输出新链表的表头。
思想描述:
将链表的next指针指向前面节点,在记录后面节点的信息。
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public class Solution {
public static ListNode ReverseList(ListNode head) {
if ( head == null || head.next == null ){
return head;
}
ListNode p,t,m;//分别记录前一个节点、当前节点、后一个节点
p = head;
t = head.next;
head.next = null;
//确保反转后最后一个节点为空
while(t!= null) {
m = t.next;//记录当前节点的后一个节点
//若使用 m = m.next 则可能出现null.next的情况,会出现报错
t.next = p;//后一个节点的指针指向前一个节点
p = t;
t = m;
}
return p;
}
注:还可以将链表存入数组或者栈中,在输出一个新的链表。