链表元素删除

给定一个链表,删除链表中等于给定值val的所有节点。返回删除之后的链表

例:1-->2-->3-->4-->3-->5-->3 ,  val =3,。返回1-->2-->4-->5

    public ListNode RemoveElement(ListNode head, int val)
    {
        ListNode temp = new ListNode(0);
        temp.next = head;
        head = temp;

        while (head.next != null)
        {
            if (head.next.value == val)
            {
                head.next = head.next.next;
            }
            else
            {
                head = head.next;
            }
        }
        return temp.next;
    }

节点类

    public class ListNode
    {
        public int value;
        public ListNode next;

        public ListNode(int val)
        {
            value = val;
            next = null;
        }

        public override string ToString()
        {
            return value + "  " + next;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链式存储结构的链表元素删除算法,可以分为以下几个步骤: 1. 首先找到要删除的节点,遍历整个链表,直到找到目标节点。 2. 找到目标节点后,将其前一个节点的指针指向目标节点的后一个节点,即跳过了目标节点,将其删除。 3. 释放目标节点的内存空间,防止内存泄漏。 下面是采用单链表实现的链表元素删除算法的C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; struct Node *next; } Node; // 创建链表 Node* createList() { Node *head = (Node*)malloc(sizeof(Node)); // 创建头节点 head->next = NULL; return head; } // 在链表尾部插入节点 void insertAtTail(Node *head, int val) { Node *p = head; while (p->next != NULL) { p = p->next; // 找到链表尾部 } Node *newNode = (Node*)malloc(sizeof(Node)); // 创建新节点 newNode->data = val; newNode->next = NULL; p->next = newNode; // 在尾部插入新节点 } // 删除链表指定元素 void deleteNode(Node *head, int val) { Node *p = head->next; Node *pre = head; // 指向p的前一个节点 while (p != NULL && p->data != val) { pre = p; p = p->next; } if (p != NULL) { // 找到目标节点 pre->next = p->next; // 跳过目标节点 free(p); // 释放目标节点内存空间 } } // 打印链表 void printList(Node *head) { Node *p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } int main() { Node *head = createList(); insertAtTail(head, 1); insertAtTail(head, 2); insertAtTail(head, 3); insertAtTail(head, 4); printf("Before delete: "); printList(head); deleteNode(head, 3); printf("After delete: "); printList(head); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值