方法1:
采用递归方法
1.找到头结点的下一个结点nextnode
2.递归找到反转前的尾结点,将尾结点作为新链表的头结点
3.将nextnode指向head
4.head设为null
5.返回新链表
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 || head.next==null)
return head;
ListNode nextnode=head.next;
ListNode newhead=ReverseList(nextnode);
nextnode.next=head;
head.next=null;
return newhead;
}
}
方法2:
遍历:将当前节点cur的下一个节点 cur.next放入到temp后,然后更改当前节点指针指向上一结点pre
public ListNode ReverseList(ListNode head) {
if (head == null)
return head;
ListNode pre = head;// 上一结点
ListNode cur = head.next;// 当前结点
ListNode tmp;// 临时结点,用于保存当前结点的指针域(即下一结点)
while (cur != null) {// 当前结点为null,说明位于尾结点
tmp = cur.next;
cur.next=pre;// 反转指针域的指向
// 指针往下移动
pre = cur;
cur = tmp;
}
// 最后将原链表的头节点的指针域置为null,还回新链表的头结点,即原链表的尾结点
head.next=null;
return pre;
}