华为上机java_华为机试丶Java教程网-IT开发者们的技术天堂

华为机试

题目描述

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

链表结点定义如下:

struct ListNode

{

int m_nKey;

ListNode* m_pNext;

};

详细描述:

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

链表的值不能重复

构造过程,例如

1

3

5

4

7

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

删除 结点 2

则结果为 7 3 1 5 4

#include

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值