精华内容
下载资源
问答
  • 删除单链表偶数节点

    2020-12-12 09:46:15
    实验11-2-4 删除单链表偶数节点 struct ListNode *createlist() { struct ListNode *p,*head,*tail; int num; scanf("%d",&num); head=tail=0; while(num!=-1) { p=(struct ListNode*)malloc(sizeof...

    实验11-2-4 删除单链表偶数节点

    struct ListNode *createlist()
    {
        struct ListNode *p,*head,*tail;
        int num;
        scanf("%d",&num);
        head=tail=0;
        while(num!=-1)
        {
            p=(struct ListNode*)malloc(sizeof(struct ListNode));
            p->data=num;
            p->next=NULL;
            if(head==NULL)
                head=p;
            else
                tail->next=p;
            tail=p;
            scanf("%d",&num);
        }
        return head;
    }
    
    struct ListNode *deleteeven(struct ListNode *head)
    {
        struct ListNode *ptr1,*ptr2;
        while(head!=NULL&&(head->data%2)==0)
        {
            ptr2=head;
            head=head->next;
            free(ptr2);
        }
        while(head==NULL)
            return NULL;
        ptr1=head;
        ptr2=head->next;
        while(ptr2!=NULL)
        {
            if((ptr2->data%2)==0)
            {
                ptr1->next=ptr2->next;
                free(ptr2);
            }
            else
                ptr1=ptr2;
            ptr2=ptr1->next;
        }
        return head;
    }
    

    总结:一套模板用一天,不明所以,总而言之多敲代码。

    展开全文
  • 6-6 删除单链表偶数节点 (20分)

    千次阅读 2020-05-14 09:16:34
    6-6 删除单链表偶数节点 (20分)

    6-6 删除单链表偶数节点 (20分)

    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

    struct ListNode {
    int data;
    struct ListNode *next; };

    函数接口定义:

    struct ListNode *createlist(); struct ListNode *deleteeven( struct
    ListNode *head );
    函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

    函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>

    struct ListNode {
    int data;
    struct ListNode *next; };

    struct ListNode *createlist(); struct ListNode *deleteeven( struct
    ListNode *head ); void printlist( struct ListNode *head ) {
    struct ListNode *p = head;
    while( p ) {
    printf("%d “, p->data);
    p = p->next;
    }
    printf(”\n"); }

    int main() {
    struct ListNode *head;

    head = createlist();
    head = deleteeven(head);
    printlist(head);

    return 0;
    }

    输入样例:
    1 2 2 3 4 5 6 7 -1
    输出样例:
    1 3 5 7

    
    struct ListNode *createlist()
    {
    	int i;
    	struct ListNode *head=NULL,*p,*q;
    	scanf("%d",&i);
    	if(i==-1)
    		return head;
    	head=(struct ListNode *)malloc(sizeof(struct ListNode));
    	head->data=i;
    	p=head;
    	scanf("%d",&i);
    	for(;i!=-1;scanf("%d",&i)){
    		q=(struct ListNode *)malloc(sizeof(struct ListNode));
    		q->data=i;
    		q->next=NULL;
    		p->next=q;
    		p=p->next;
    	}
    	return head;
    }
    struct ListNode *deleteeven( struct ListNode *head )
    {
    	struct ListNode *p=head,*q,*k;
    	for(;p!=NULL&&p->data%2==0;){
    		q=p;
    		p=p->next;
    		free(q);
    	}	
    	if(p==NULL)
    		return NULL;
    	head=p;
    	q=head->next;
    	for(;q;){
    		if(q->data%2==0){
    			k=q;
    			p->next=q->next;
    			q=q->next;
    			free(k);
    		}
    		else{
    			p=p->next;
    			q=q->next;
    		}
    	}
    	return head;
    }
    
    展开全文
  • 删除单链表偶数节点 (20分)

    千次阅读 2019-12-21 14:38:16
    删除单链表偶数节点 (20分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: ...

    删除单链表偶数节点 (20分)

    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

    struct ListNode {
        int data;
        struct ListNode *next;
    };
    

    函数接口定义:

    struct ListNode *createlist();
    struct ListNode *deleteeven( struct ListNode *head );
    

    函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

    函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。
    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct ListNode {
        int data;
        struct ListNode *next;
    };
    
    struct ListNode *createlist();
    struct ListNode *deleteeven( struct ListNode *head );
    void printlist( struct ListNode *head )
    {
         struct ListNode *p = head;
         while (p) {
               printf("%d ", p->data);
               p = p->next;
         }
         printf("\n");
    }
    
    int main()
    {
        struct ListNode *head;
    
        head = createlist();
        head = deleteeven(head);
        printlist(head);
    
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    1 2 2 3 4 5 6 7 -1
    

    输出样例:

    1 3 5 7 
    

    思路
    本题和前边的差不多
    需要注意的是创建链表可以创建成带头结点的也对,
    但是返回的时候记得要返回第一个结点(根据看int main 中的程序决定出来的)(不带头结点也对只要返回第一个数的指针即可)
    删除也是因为 int main中给传入的head指的是第一个结点所以要分为在头删还是在中间删

    struct ListNode *createlist(){
    //带有头结点的做法头结点head要先开辟空间,头结点它是有空间的不是仅有一个单纯的指针
     struct ListNode *head=(struct ListNode *)malloc(sizeof(struct ListNode));
     struct ListNode *tail;
     tail=head;
     //struct ListNode *head,*tail;@1
    //head=tail=NULL;@2
    //@1和@2的写法是不对的那是不带头结点的写法
    int Data;
    while(scanf("%d",&Data)&&Data!=-1){
    struct ListNode *p=(struct ListNode *)malloc(sizeof(struct ListNode));
    p->data=Data;
    //tail->next指的就是第一个数直接在tail->next那里存数就行不用分在头插还是在中间插
    tail->next=p;
    tail=p;
    }
    //看测试程序void printlist( struct ListNode *head )中 struct ListNode *p = head; printf("%d ", p->data);
    //说明它是从第一个元素开始输出的所以返回的是第一个元素的指针head->next而不是head
    return head->next;
    }
    //上边的做法和下边的做法都对
    /*struct ListNode *createlist(){
    struct ListNode *head,*tail;
    head=tail=NULL;
    int Data;
    while(scanf("%d",&Data)&&Data!=-1){
    struct ListNode *p=(struct ListNode *)malloc(sizeof(struct ListNode));
    p->data=Data;
    if(head==NULL){
            head=tail=p;
        }
        else{
            tail->next=p;
            tail=p;
        }
    }
    return head;
    }
    */
    
    
    struct ListNode *deleteeven( struct ListNode *head ){
    struct ListNode *p,*ptr;
    while(head!=NULL){
        if(head->data%2==0){
            p=head;
            head=head->next;
            free(p);    
        }
        else{
            break;
        }
    }
    if(head==NULL){return NULL;}
    p=head;
    ptr=p->next;
    while(ptr!=NULL){
           if(ptr->data%2==0){
                  p->next=ptr->next;
                  free(ptr);
                 }
            else{
                  p=ptr;
                }     
              ptr=p->next;
           }
        return head;
    }
    
    
    展开全文
  • 删除单链表偶数节点 (10 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ...

    删除单链表偶数节点 (10 分)

    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下:

    struct ListNode {
    int data;
    struct ListNode *next;
    };

    函数接口定义:

    struct ListNode *createlist();
    struct ListNode *deleteeven( struct ListNode *head );
    函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

    函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>

    struct ListNode {
    int data;
    struct ListNode *next;
    };

    struct ListNode *createlist();
    struct ListNode *deleteeven( struct ListNode *head );
    void printlist( struct ListNode *head )
    {
    struct ListNode *p = head;
    while § {
    printf("%d “, p->data);
    p = p->next;
    }
    printf(”\n");
    }

    int main()
    {
    struct ListNode *head;

    head = createlist();
    head = deleteeven(head);
    printlist(head);
    
    return 0;
    

    }

    /* 你的代码将被嵌在这里 */

    输入样例:

    1 2 2 3 4 5 6 7 -1

    输出样例:

    1 3 5 7

    struct ListNode *createlist()
    {   //尾插法读入顺序建立链表,-1为结束符
        struct ListNode *head=NULL, *tail=NULL;
        int t;
        scanf("%d",&t);
        while(t != -1){
            struct ListNode *temp = (struct ListNode*)malloc(sizeof(struct ListNode));
            temp->data = t;
            temp->next = NULL;
            if(tail==NULL)
                head = tail = temp;
            else{
                tail->next = temp;
                tail = tail->next;
            }
            scanf("%d",&t);
        }
        return head;
    }
    
    struct ListNode *deleteeven( struct ListNode *head )
    {
        struct ListNode *p=head,*q;
        while(head && head->data%2==0){ //保证头结点不是偶数
            p = head;
            head = head->next;
            free(p);
        }
        //head空指针或者指向一个奇数节点,外层循环判断到结尾,内层循环连续删除
        p = head;
        while(p && p->next){
            while(p->next && p->next->data%2==0){
                q = p->next;
                p->next = q->next;
            }
            p = p->next;
        }
        return head;
    }
    
    展开全文
  • 删除单链表偶数节点 (15 分)

    千次阅读 2018-11-30 15:34:19
    6-5 删除单链表偶数节点 (15 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode {  int data;  struct ListNode *next; }; 函数...
  • 6-5 删除单链表偶数节点 (20分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: ...
  • 6-13 删除单链表偶数节点 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口...
  • PTA: 6-5 删除单链表偶数节点 (20 分)

    千次阅读 2019-03-31 10:07:53
    删除单链表偶数节点 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。 链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ...
  • 6-13 删除单链表偶数节点 (20 分) **原创文章,欢迎转载,转载时请附上链接: ** 相似题型: 6-11 单链表结点删除 (20 分) https://blog.csdn.net/weixin_43527871/article/details/89523815 相似题型:6-12 ...
  • 实验11-2-4 删除单链表偶数节点 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口...
  • 删除单链表偶数节点题目答案测试点 题目 答案 struct ListNode *createlist() { struct ListNode *head,*temp,*p; head=(struct ListNode *)malloc(sizeof(struct ListNode)); head->next=NULL; p=head; ...
  • PTA 实验11-2-4 删除单链表偶数节点 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数...
  • 实验11-2-4 删除单链表偶数节点 (20 分) 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; ...
  • 创建链表,返回头节点。创建头指针,并分配内存空间,头...删除函数,将头节点单拿出来考虑。for遍历链表节点,while判断删除。#include #include #includeusing namespace std;struct ListNode {int data;struct Li...
  • 创建链表,返回头节点。 创建头指针,并分配内存空间,头指针的下一个...删除函数,将头节点单拿出来考虑。for遍历链表节点,while判断删除。 #include <stdio.h>#include <stdlib.h>#include<ios...
  • 删除单链表偶数节点PTA

    千次阅读 2019-05-02 10:39:29
    本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *createlist(); ...
  • 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中偶数值的结点删除。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *createlist();...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 128
精华内容 51
热门标签
关键字:

删除单链表偶数节点