C语言笔记30 •单链表经典算法OJ题-2.移除链表元素•

移除链表元素

1.问题

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

2.代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>



typedef int SLTDataType;

typedef struct SListnode
{
	SLTDataType val;
	struct SListnode* next;
}ListNode;

ListNode* createNode(SLTDataType val)
{
	ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));
	if (newnode == NULL)
	{
		perror("malloc");
		exit(1);
	}
	newnode->val = val;
	newnode->next = NULL;
	return newnode;
}



struct ListNode* removeElements(struct ListNode* head, int val)
{
	ListNode* pur = head;

	ListNode* newhead, *newtail;//创建新链表
	newhead = newtail = NULL;//表头 表尾初始化

	while (pur)
	{
		if (pur->val != val)
		{
			if (newhead == NULL)
			{
				newhead = newtail = pur;
			}
			else
			{
				newtail->next = pur;
				newtail = newtail->next;
			}
		}
		pur = pur->next;
	}
	if (newtail)
	{
		newtail->next=NULL;
	}
	return newhead;
}

int main()
{
	ListNode* node1, * node2, * node3, * node4, * node5, * node6, * node7;

	node1        =        createNode(1);
	node2 = node1->next = createNode(2);
	node3 = node2->next = createNode(6);
	node4 = node3->next = createNode(3);
	node5 = node4->next = createNode(4);
	node6 = node5->next = createNode(5);
	node7 = node6->next = createNode(6);//创建一个链表

	ListNode* newhead = removeElements(node1, 6);//移除链表元素:6

	while (newhead)
	{
		printf("%d ", newhead->val);
		newhead = newhead->next;
	}
	return 0;
}

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值