Skip to content

Commit e6d511d

Browse files
committed
Reverse Linked List II
1 parent 9888f88 commit e6d511d

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

LinkedList/ReverseLinkedListII.php

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace Hakam\LeetCodePhp\LinkedList;
4+
/**
5+
* LeetCode Problem Link : https://leetcode.com/problems/reverse-linked-list-ii
6+
*/
7+
class ReverseLinkedListII
8+
{
9+
/**
10+
* @param ListNode $head
11+
* @param Integer $left
12+
* @param Integer $right
13+
* @return ListNode
14+
*/
15+
public function reverseBetween(ListNode $head, int $left, int $right): ListNode
16+
{
17+
$sentinel = new ListNode(0, $head);
18+
$p1 = $sentinel;
19+
20+
for ($i = 0; $i < $left - 1; $i++) {
21+
$p1 = $p1->next;
22+
}
23+
24+
$p2 = $p1->next;
25+
$p3 = $p2;
26+
$reverted = null;
27+
28+
for ($i = 0; $i <= ($right - $left); $i++) {
29+
$tmp = $p2->next;
30+
$p2->next = $reverted;
31+
$reverted = $p2;
32+
$p2 = $tmp;
33+
}
34+
35+
$p1->next = $reverted;
36+
$p3->next = $p2;
37+
return $sentinel->next;
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"testCase1": {
3+
"expectedResult":[1,4,3,2,5],
4+
"input": [[1,2,3,4,5],2,4]
5+
},
6+
"testCase2": {
7+
"expectedResult":[5],
8+
"input": [[5],1,1]
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Hakam\LeetCodePhp\Tests\LinkedList;
4+
5+
use Hakam\LeetCodePhp\LinkedList\ReverseLinkedListII;
6+
use Hakam\LeetCodePhp\Tests\Helper\LinkedListHelperTrait;
7+
use Hakam\LeetCodePhp\Tests\Helper\MainTest;
8+
9+
/**
10+
* @covers \Hakam\LeetCodePhp\LinkedList\ReverseLinkedListII
11+
*/
12+
class ReverseLinkedListIITest extends MainTest
13+
{
14+
use LinkedListHelperTrait;
15+
16+
/**
17+
* @dataProvider provideData
18+
*/
19+
public function testWithDataList($expectedResult, $inputData): void
20+
{
21+
$reversList = new ReverseLinkedListII();
22+
$list = $this->convertFromArray($inputData[0]);
23+
self::assertEmpty(array_diff($expectedResult,
24+
$this->convertToArray($reversList->reverseBetween($list,$inputData[1],$inputData[2]))));
25+
}
26+
}

0 commit comments

Comments
 (0)