题目描述:
输入一个链表,反转链表后,输出新链表的表头。
解题思路:
第一种解题思路就是使用栈,先遍历一次链表,存储所有的链表节点,再重新构造一个链表,显然这种解法不是最好的。
于是就有了第二种,用一个指针记录当前节点的前一个节点,并且将当前节点的next指针指向前一个节点,实现链表翻转的目的
实现代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return null;
}
ListNode newHead = head;
ListNode cur = head;
ListNode pre = null;
while(cur != null){
ListNode next = cur.next;
//当前节点的下一个节点为null
//说明到达链表尾部了,即cur节点就是翻后链表的头节点
if(next == null){
newHead = cur;
}
cur.next = pre;
pre = cur;
cur = next;
}
return newHead;
}
}