题目
输入一个链表,反转链表后,输出新链表的表头。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.Stack;
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode pHead = null; //记录头指针
ListNode pCur = head; //第一个开始的节点,头结点
ListNode pPre = null; //头结点的前一个节点 null
while(pCur != null){
ListNode pNext = pCur.next; //记录当前节点的下一个节点
//如果当前节点的下一个节点为空,则当前节点是头结点
if(pNext == null){
pHead = pCur;
}
//当前节点的下一个是它原本的前一个
pCur.next = pPre;
//移动前两个指针
pPre = pCur;
pCur = pNext;
}
return pHead;
}
/*借助三个指针:记录当前节点、当前节点的前一个节点和后一个节点
public ListNode ReverseList(ListNode head) {
Stack<ListNode> s = new Stack<>();
while(head != null){
s.push(head);
head = head.next;
}
//记录头结点
if(!s.isEmpty()){
head = s.pop();
}
ListNode temp = head;
while(!s.isEmpty()){
ListNode node = s.pop();
node.next = null; //为什么一定要写这个
temp.next = node;
temp = temp.next;
}
return head;
}
*/
}