List

Jimmy (xiaoke) Shen
2 min readApr 3, 2020

--

143. Reorder List

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reorderList(self, head: ListNode) -> None:
"""
Do not return anything, modify head in-place instead.
"""
if head is None:return
nodes = []
node = head
while True:
nodes.append(node)
if node.next is None:break
node = node.next
N = len(nodes)
i, j = 0, N-1
count = 0
a, b = nodes[i], nodes[j]
while True:
if count==N-1:
a.next =None
break
a.next = b
b.prev = a
count += 1
a = b
if count%2==1:
i += 1
b = nodes[i]
else:
j-=1
b = nodes[j]

237. Delete Node in a Linked List

C++

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
while (true)
{
node->val = node->next->val;
if (!node->next->next)
{
node->next = nullptr;
break;
}
node = node->next;
}
return;
}
};

Or more efficient

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void deleteNode(ListNode* node) {
node->val = node->next->val;
node->next = node->next->next;
return;
}
};

Python

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val = node.next.val
node.next = node.next.next

203. Remove Linked List Elements

C++

/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val)
{
if (!head)return head;
if(head->val==val)return removeElements(head->next, val);
else
{
head->next = removeElements(head->next, val);
return head;
}
}
};

--

--

No responses yet