反转链表

传送门

题目描述:

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

题解:

遍历法

需要遍历、头、尾三个指针,从尾部开始反转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* @param ListNode $head
* @return ListNode
*/
function reverseList($head) {
if ($head == null)
return null;
$prev = $p = $head;
$tail = $head->next;
while ($tail)
{
$p = $tail;
$tail = $p->next;
$p->next = $prev;
$prev = $p;
}
$head->next = null;
return $p;
}

数组法

先遍历存储指针,再从头部开始反转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* @param ListNode $head
* @return ListNode
*/
function reverseList($head) {
if ($head == null)
return null;
$_head = null;
$p = $head;
$arr = [];
while ($p->next) {
$arr[] = $p;
$p = $p->next;
}
$_head = $p;
$i = count($arr);
while($i != 0)
{
$p->next = $arr[--$i];
$p = $arr[$i];
}
$arr[0]->next = null;
return $_head;
}

-------------本文结束  感谢您的阅读-------------