法1思路
只需要改变链表中next的指向,就能反转链表
首先定义一个pre指针,初始化为null,再定义一个r指针,初始化为null。
然后就要开始反转了,首先要把 head->next 结点用r指针保存一下,也就是保存一下这个结点。然后改变当前结点也就是head节点中next的指向,最后移动指针,head指向下一个节点,pre指向下一个结点的前结点。
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode r=null;
while(head!=null){
r=head.next;
head.next=pre;
pre=head;
head=r;
}
return pre;
}
}
法2思路
使用虚拟结点,头插法,每次将下一个结点插入到虚拟结点之后。
class Solution {
public ListNode reverseList(ListNode head) {
ListNode dummy=new ListNode(-1,null);
ListNode cur=head;
ListNode temp=null;
while(cur!=null){
temp=cur.next;
cur.next=dummy.next;
dummy.next=cur;
cur=temp;
}
return dummy.next;
}
}