LeetCode演算法題203:移除連結串列元素解析
阿新 • • 發佈:2018-11-12
刪除連結串列中等於給定值 val 的所有節點。
示例:
輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
這個題應該是比較簡單了,但是條件還是得稍微多想想,首先如果是空連結串列那就一定是要返回空,此外如果表頭元素是val,那就需要移動表頭直到表頭元素不為val。之後就好說了,如果當前節點的下一節點的值為val,那麼就將當前節點指向下下一節點,否則就向前移動當前節點。C++的程式是稍顯複雜的程式,python程式是優化過的程式。
C++原始碼:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if (head==NULL) return NULL;
while(head!=NULL && head->val == val)
head = head->next;
ListNode *p = head;
ListNode *q = NULL;
if (p!=NULL) q = p->next;
while(q!=NULL)
{
if (q->val == val)
p->next = q->next;
else p = p->next;
q = q->next;
}
return head;
}
};
python3原始碼:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
if head==None:
return None
while head!=None and head.val==val:
head = head.next
p = head
while p!=None and p.next!=None:
if p.next.val == val:
p.next = p.next.next
else:
p = p.next
return head