题目描述
输入一个链表,反转链表后,输出新链表的表头。
时间限制:1秒 空间限制:32768K 热度指数:435632
解答:
法一:利用头插法重新建立单链表------------>很容易错,所以,不建议使用,因为做题要的是正确率与效率!!!!!
/*
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;
}
if(head.next == null){//如果只有一个结点
return head;
}
//创建一个头结点,方便进行头插法,以及初始化第一个结点
ListNode LHead = new ListNode(0);
LHead.next = head;
ListNode pMove = head.next,qMove = null;
head.next = null;
if(pMove.next != null){//三结点以上,则需要保存pMove的后继
qMove = pMove.next;
}
//循环插入其他结点
while(pMove != null){
pMove.next = LHead.next;
LHead.next = pMove;
pMove = qMove;
if(qMove != null){
qMove = qMove.next;
}
}
return LHead.next;
}
}
法二:借助栈来做----->略---->推荐使用。