您的位置:首页 > 其它

Leetcode(206)之反转链表

u3860932 2020-01-04 18:11 447 查看

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

题目描述:

解题思路:

1.迭代

首先设置三个指针,temp和next指向null,curr指向head,下面迭代开始。

a. next指向 curr -> next(如上图)。

b. 然后将 curr -> 指向temp(如上图)。

c. 然后将temp指向curr,curr指向next,这样算是完成了第一次迭代(如上图)。

接下来重复a, b, c,不断进行迭代,直到curr -> 指向null(如上图),这时将curr -> 指向 temp,然后返回temp就完成了反转。

2.递归

代码:

//迭代
public ListNode ReverseListIteration(ListNode head)
{
if (head == null)
return null;
ListNode temp = null;
ListNode curr = head;
while (curr.next != null)
{
ListNode next = curr.next;
curr.next = temp;
temp = curr;
curr = next;
}
curr.next = temp;
return curr;
}

//递归
public ListNode ReverseListRecusion(ListNode head)
{
if (head == null)
return null;
if (head.next == null)
return head;

ListNode p = ReverseListRecusion(head.next);
head.next.next = head;
head.next = null;
return p;
}
标签:  Next