HJ48 从单向链表中删除指定值的节点

描述 

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

链表的值不能重复。 

构造过程,例如输入一行数据为: 

6 2 1 2 3 2 5 1 4 5 7 2 2 

则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示: 

1 2 表示为 

2->1 

链表为2->1 

3 2表示为 

2->3 

链表为2->3->1

5 1表示为

1->5 

链表为2->3->1->5

4 5表示为

5->4 

链表为2->3->1->5->4

7 2表示为

2->7 

链表为2->7->3->1->5->4

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

最后一个参数为2,表示要删掉节点为2的值 

删除 结点 2 

则结果为 7 3 1 5 4 

数据范围:链表长度满足 1≤n≤1000 1≤n≤1000  ,节点中的值满足 0≤val≤10000 0≤val≤10000 

测试用例保证输入合法 

输入描述:

输入一行,有以下4个部分:

1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值

输出描述:

输出一行

输出删除结点后的序列,每个数后都要加空格

示例1:
输入:5 2 3 2 4 3 5 2 1 4 3
输出:2 5 4 1
说明:形成的链表为2->5->3->4->1
删掉节点3,返回的就是2->5->4->1 

示例2:
输入:6 2 1 2 3 2 5 1 4 5 7 2 2
输出:7 3 1 5 4
#include 
#include 
#include 
using namespace std;
struct node{
    int data;
    node *next;
};

//void deleteNode(node *head,int x);



int main() {
    char c;
    node *L;
    int total;
    int data0;
    int datai;
    int deleteN=0;
    while(cin>>total){
        if(total>=1&&total<=1000){
            cin>>data0;
            for(int i=0;i>L[i].data;
                L=L->next;
            }

            cin>>deleteN;
            for(int j=0;jnext =L[j].next;


                }else{
                cout<<"error"<

HJ48 从单向链表中删除指定值的节点_第1张图片

 说明:上述代码并不是真正的答案,但是编译时出现这个问题。现在主要来分析这个问题。首先是数据数据的格式,查看是否出现,数据溢出和踩踏的问题,如数组越界。 

#include 
#include 
#include 
using namespace std;
struct node {
    int data;
    node* next;
};
//void deleteNode(node *head,int x)
int main() {
    char c;
    node* L;
    int nodesn;
    int headData;
    int taili, headi;
    int deleteN = 0;
    while (cin >> nodesn) { //1
        if (nodesn >= 1 && nodesn <= 1000) {
            cin >> headData;
            if (headData >= 0 && headData <= 10000) {
                L[0].data = headData;
                //除头节点之外的插入
                for (int i =1; i < nodesn; i++) {
                    cin >>taili>>headi ;
                    if(headi== L[i].data){
                        L[i+1].data =taili;
                        L->next= L->next->next;
                    }
                }
                cin >> deleteN;
                for (int j = 0; j < nodesn; j++) {
                    if (L[j].data == deleteN) {
                        node* prev;
                        prev = L[j - 1].next;
                        prev->next = L[j].next;
                    }
                }
                //output
                for (int l = 0; l < nodesn; l++)
                    cout << L[l].data << " ";
                cout << endl;
            }
            else
                cout << "input error!" << endl;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

你可能感兴趣的:(牛客网华为机试,链表,算法,c++)