/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
头插法:
public ListNode ReverseList(ListNode head) {
ListNode cur = head;
if(head!=null)
{
head=head.next;
cur.next = null;
}
ListNode temp = head;
while(head!=null)
{
head=head.next;
temp.next = cur;
cur = temp;
temp = head;
}
return cur;
}
递归实现:
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)
{
return head;
}
ListNode temp = ReverseList(head.next);//当传入结点为空时,返回值存在temp中作为翻转链表的头结点。
head.next.next=head;//从底层依次退出并对链表进行翻转
head.next=null;
return temp;
}
就地反转:
public ListNode ReverseList(ListNode head) {
ListNode cur = null;//存储翻转后链表的头结点;
ListNode tempNext = null;//存储翻转前链表的头结点的下一个结点,用于翻转前链表头结点的后移
while(head!=null)
{
tempNext = head.next;//存储当前头结点的下一个结点。
head.next = cur;//链表翻转。
cur = head;//将翻转后链表的头指针前移。
head=tempNext;//更新翻转前的头结点位置。
}
return cur;
}