站点图标 陌路寒暄

逆置链式链表(线性表)

逆置链式链表(线性表)

时间: 1ms        内存:128M

描述:

本题只需要提交填写部分的代码
(线性表)试编写算法将线性表就地逆置,以链式存储结构实现。
代码:
#include <stdio.h>
#include <malloc.h>
struct Num
{
    int n;
    struct Num *next;
}num;
struct Num *createlist(struct Num *head);
void print(struct Num *head);
void destroy(struct Num *head);
void destroy(struct Num *head)
{
 struct Num *p;
 while(head!=NULL)
 {
  p=head->next;
  delete(head);
  head=p;
 }
}
int main()
{
    struct Num *head=NULL;
    head=createlist(head);       //建立
    print(head);//输出
 destroy(head);
    return 0;
}
struct Num *createlist(struct Num *head)                //头插法建立链表
{
    struct Num *p;
    p=head=(struct Num*)malloc(sizeof(struct Num));
    head=NULL;                                    
    p=(struct Num*)malloc(sizeof(struct Num));            //p建立新结点
    while(scanf("%d",&p->n)!=EOF)                      //将新结点插到开头的位置
    {
        /***************/
            添加代码
        /*****************/
        p=(struct Num*)malloc(sizeof(struct Num));         //p每次建立新结点
    }
    return head;
}
void print(struct Num *head)
{
    struct Num *current=head;
    while(current!=NULL)
    {
        printf("%d ",current->n);
        current=current->next;
    }
}

输入:

1 2 3 4 5 6 7 8 9

输出:

9 8 7 6 5 4 3 2 1

示例输入:

10 23 56 89 11

示例输出:

11 89 56 23 10 

提示:

参考答案(内存最优[0]):

#include<iostream>
using namespace std;
struct line
{
	int num;
	line *next;
};
line *creat()
{
	line *head;
	line *p;
	p=head=new line;
	while(cin>>p->num)
	{
		p->next=new line;
		p=p->next;

	}
	p->next=NULL;
	return head;
}
line *nizhi(line *head)
{
	line *pFront,*pRear,*p;
	p=pFront=pRear=head;
	p=p->next;
	pFront->next=NULL;
	if(p==NULL)return head;
	pRear=p->next;
	p->next=pFront;
	while(pRear)
	{
		pFront=p;
		p=pRear;
		pRear=p->next;
		p->next=pFront;
	}
	head=p;
	return head;
}
void print(line *head)
{
	head=head->next;
	while(head)
	{
		cout<<head->num<<" ";
		head=head->next;
	}
}
int main()
{
	line *head;
	head=creat();
	head=nizhi(head);
	print(head);
	return 0;

}

参考答案(时间最优[0]):

#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct date)

int t,m=0;
struct date
{
	int num;
	struct date *next;
};
struct date * creat()
{
	struct date *head;
	struct date *p1,*p2;
	t=0;
	p1=p2=(struct date *)malloc(LEN);
	head=NULL;
	while(scanf("%d",&p1->num)!=EOF)
	{
		t++;
		m++;
		if(t==1)
			head=p1;
		else
			p2->next=p1;
		p2=p1;
		p1=(struct date *)malloc(LEN);
	}
	p2->next=NULL;
	return (head);
}
void print(struct date *head)
{
	struct date *p;
	p=head;
	if(head!=NULL)
		do
		{
			printf("%d ",p->num);

			p=p->next;
		}while(p!=NULL);
	printf("\n");
}

int main()
{
	struct date *p,*p3,*p4,*p5;
	p3=creat();
    p=p3; 
    p4=p; 
    p=p->next; 
    while(p) 
    { 
        p3=p4; 
        p4=p; 
        p5=p->next; 
        p4->next=p3; 
        p=p5;      
    }
	p=p4; 
    while(m--) 
        p=p->next; 
    p->next->next=NULL; 
    print(p4);
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

退出移动版