输入一个链表,反转链表后,输出新链表的表头。
/*
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 cur=head;
ListNode oldhead=null;
ListNode newhead=null;
while(cur!=null){
oldhead=cur.next;
cur.next=newhead;
newhead=cur;
cur=oldhead;
}
return newhead;
}
}
解题思路
设置三个指针,head为当前节点,pre为当前节点的前一个节点,next为当前节点的下一个节点,需要pre和next的目的是让当前节点从pre->head->next1->next2
变成pre<-head next1->next2
的过程中,用pre让节点反转所指方向,next节点保存next1节点防止链表断开