203. Remove Linked List Elements。

Remove all elements from a linked list of integers that have value val.

Example
Given: 1 –> 2 –> 6 –> 3 –> 4 –> 5 –> 6, val = 6
Return: 1 –> 2 –> 3 –> 4 –> 5


很基础的题,对链表进行遍历查找删除节点,由于给的节点第一个就有数据,这其实不好计算,可以使用一个存放空数据的空的头结点来简化计算过程。

#include <iostream>
using namespace std;

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode temp(0);
        temp.next = head;//自己创造一个头结点
        ListNode* p = &temp;
        ListNode* q = head;

        while(q) {
            if(q->val == val) {
                p->next = q->next;
            } else {
                p = p->next;
            }
            q = q->next;
        }
        return temp.next;
    }
};

int main() {
    Solution s;
    ListNode node1(1);
    ListNode node2(2);
    ListNode node3(6);
    ListNode node4(3);
    ListNode node5(4);
    ListNode node6(5);
    ListNode node7(6);

    node1.next = &node2;
    node2.next = &node3;
    node3.next = &node4;
    node4.next = &node5;
    node5.next = &node6;
    node6.next = &node7;

    s.removeElements(&node1,6);
}
对于顺序存储线性表(数组),我们可以使用双指针法来实现倒置操作: ```python # 假设我们有一个简单的顺序表 List List = [1, 2, 3, 4, 5] def reverse_list(lst): left, right = 0, len(lst) - 1 while left < right: lst[left], lst[right] = lst[right], lst[left] left += 1 right -= 1 return lst reversed_lst = reverse_list(List) print("倒置后的线性表:", reversed_lst) # 删除元素 def remove_element(lst, element): for i in range(len(lst)): if lst[i] == element: del lst[i] print("删除指定元素后的线性表:", lst) # 删除一个元素,例如数字3 remove_element(reversed_lst, 3) ``` 对于链式存储线性表(单链表),我们可以定义节点和链表类来实现: ```python class Node: def __init__(self, data=None): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None # 插入节点 def insert(self, data): new_node = Node(data) if not self.head: self.head = new_node else: current = self.head while current.next: current = current.next current.next = new_node # 打印链表 def print_list(self): elements = [] current = self.head while current: elements.append(current.data) current = current.next print("链表:", elements) # 删除节点 def delete(self, target): if not self.head: return if self.head.data == target: self.head = self.head.next return current = self.head while current.next and current.next.data != target: current = current.next if current.next: current.next = current.next.next # 创建链表并插入元素 linked_list = LinkedList() linked_list.insert(1) linked_list.insert(2) linked_list.insert(3) # 打印链表 linked_list.print_list() # 删除指定元素,例如数字2 linked_list.delete(2) # 再次打印链表 linked_list.print_list() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值