1. 程式人生 > >LeetCode演算法題203:移除連結串列元素解析

LeetCode演算法題203:移除連結串列元素解析

刪除連結串列中等於給定值 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