华为机试练习题---链表操作

   日期:2020-08-20     浏览:140    评论:0    
核心提示:华为机试题目描述输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};详细描述:本题为考察链表的插入和删除知识。链表的值不能重复构造过程,例如1 <- 23 <- 25 <- 14 <- 57 <- 2最后的链表的顺序为 2 7 3 1 5 4删除 结点 2则结果为 7

华为机试
题目描述
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

链表结点定义如下:

struct ListNode

{

int m_nKey;

ListNode* m_pNext;

};

详细描述:

本题为考察链表的插入和删除知识。

链表的值不能重复

构造过程,例如

1 <- 2

3 <- 2

5 <- 1

4 <- 5

7 <- 2

最后的链表的顺序为 2 7 3 1 5 4

删除 结点 2

则结果为 7 3 1 5 4

#include <iostream>
using namespace std;

typedef struct ListNode
{
	int m_nKey;
	struct ListNode* m_pNext;
}ListNode;

//创建链表头结点
ListNode* creatList(int headNumber)
{
	//ListNode* pHead = new ListNode[number];
	ListNode* pHead = new ListNode;
	pHead->m_nKey = headNumber;
	pHead->m_pNext = NULL;
	return pHead;
}

//插入元素
void insertList(ListNode* head, int data, int position)
{
	ListNode* pCurrent = head;
	while (pCurrent->m_nKey != position)
	{
		pCurrent = pCurrent->m_pNext;
	}
	ListNode* pTemp = new ListNode;
	pTemp->m_nKey = data;
	pTemp->m_pNext = pCurrent->m_pNext;
	pCurrent->m_pNext = pTemp;
}

//删除元素//若删除后链表为空则返回空指针
ListNode* deleteList(ListNode* head, int data)
{
	if (head->m_nKey == data && head->m_pNext == NULL)
	{
		return NULL;
	}
	if (head->m_nKey == data)
	{
		ListNode* pHead = head->m_pNext;
		return pHead;
	}
	ListNode* pPre = head;
	ListNode* pCurrent = pPre->m_pNext;
	while (pPre->m_pNext != NULL)
	{
		if (pCurrent->m_nKey == data)
		{
			pPre->m_pNext = pCurrent->m_pNext;
		}
		pPre = pPre->m_pNext;
		pCurrent = pCurrent->m_pNext;
	}
	return head;
}

//打印链表
void printList(ListNode* head)
{
	ListNode* pTemp = head;
	while (pTemp->m_pNext != NULL)
	{
		cout << pTemp->m_nKey << " ";
		pTemp = pTemp->m_pNext;
	}
	cout << pTemp->m_nKey << " ";
}

int main()
{
	int num; //链表节点数
	while (cin >> num)
	{
		int headNumber = 0;
		cin >> headNumber;
		ListNode* pHead = creatList(headNumber);
		for (int i = 0; i < num - 1; i++)
		{
			int data, position;
			cin >> data >> position;
			insertList(pHead, data, position);
		}
		//printList(pHead);
		//cout << endl;
		int deldata;
		cin >> deldata;
		ListNode* pHead2 = deleteList(pHead, deldata);
		printList(pHead2);
		cout << endl;
	}
	return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服