单链表之插入结点

单链表之插入结点

题:编写程序实现单链表的插入。【美国某著名计算机嵌入式公司2005年面试题】

答案:完整代买如下:

 

// P167_example1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>

typedef struct student
{
	int data;
	struct student *next;
}node;

//建立单链表
node* create()
{
	node *head,*p,*s;
	int x, cycle = 1;
	head = (node *)malloc(sizeof(node));
	p = head;
	while(cycle)
	{
		std::cout<<"please input the data: ";
		std::cin>>x;
		std::cout<<std::endl;
		if(x != 0)
		{
			s = (node *)malloc(sizeof(node));
			s->data = x;
			p->next = s;
			p = s;
		}
		else
			cycle = 0;
	}
	head = head->next;
	p->next = NULL;
	return head;
}
//单链表测长
int length(node *head)
{
	int n = 0;
	node *p;
	p = head;
	while(p != NULL)
	{
		p = p->next;
		n++;
	}
	return n;
}
//单链表打印
void print(node *head)
{
	node *p;
	int n;
	n = length(head);
	std::cout<<"Now, These "<<n<<" records are: "<<std::endl;
	p = head;
	if(p != NULL)
	{
		while(p != NULL)
		{
			std::cout<<p->data<<" -> ";
			p = p->next;
		}
		std::cout<<std::endl;
	}
}
//单链表删除结点
node* del(node *head, int num)
{
	node *p1,*p2;
	p1 = head;
	while(num != p1->data && p1->next != NULL)
	{
		p2 = p1;
		p1 = p1->next;
	}
	if(num == p1->data)
	{
		if(p1 == head)
		{
			head = p1->next;
			free(p1);
		}
		else
		{
			p2->next = p1->next;
			free(p1);
		}
	}
	else
	{
		std::cout<<num<<" could not been found"<<std::endl;
	}
	return head;
}
//插入结点
node* insert(node *head, int num)
{
	node *p0,*p1,*p2;
	p1 = head;
	p0 = (node *)malloc(sizeof(node));	//待插入的结点
	p0->data= num;
	while(p0->data > p1->data && p1->next != NULL)
	{
		p2 = p1;
		p1 = p1->next;
	}
	if(p0->data < p1->data)
	{
		if(p1 == head)
		{
			p0->next = p1;
			head = p0;
		}
		else
		{
			p0->next = p1;
			p2->next = p0;
		}
	}
	else
	{
		p1->next = p0;
		p0->next = NULL;
	}
	return head;
}


int _tmain(int argc, _TCHAR* argv[])
{
	node *head;
	head = create();
	print(head);
	//删除结点
	int num;
	std::cin>>num;
	head = del(head, num);
	print(head);	//打印删除后的单链表
	//插入结点
	std::cin>>num;
	head = insert(head, num);
	print(head);
	return 0;
}

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110061.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 毕业两年

    又到毕业季,去年毕业一年,今年,毕业两年了,一年一度的“毕业N年”系列。今年经历了两件事,离职和成长。离职 去年8月份从百度离职了,北京来到杭州,加入现在这家创业公司,做乐器教育方向的,应用叫Finger。成长 技术。这个三两句话也说不清楚,最近一年忙于工作也没写博客了。从客观角度来看的话,更多关注工程的架构和可扩展性,也厌烦了重复性的工作,把重复性的逻辑都通过封装解耦出去,通过“

    2022年3月11日
    41
  • uniapp真机调试安卓_车丝机怎么调试大小丝

    uniapp真机调试安卓_车丝机怎么调试大小丝真机测试规则1、不能用localhost或127.0.0.1:报failabort错误2、ipconfig下不能用以太网的IPv4:报failtimeout错误3、连接同一个WIFI:(1)笔记本开放热点给手机连接(2)笔记本和手机连接同一个WIFI4、一定要关掉防火墙,或者设置这几个地址、端口开放也行,傻瓜式点的就是全部关掉防火墙。更多教程JavaW…

    2025年9月19日
    4
  • ArrayList扩容机制JDK1.8

    ArrayList扩容机制JDK1.8本题的所有的讲解都是基于JDK8这道题考察了ArrayList的构造器和对扩容机制的了解,本篇博客基于此出发讲解ArrayList的扩容机制想要做出这道题必须了解ArrayList的构造函数,ArrayList的构造函数总共有三个:ArrayList()构造一个空的数组。JDK7中构造一个初始容量为10的空列表但是JDK8中只是构造一个空的数组ArrayList(Collection<?extendsE>c)构造一个包含指定collection的元素的数组,这些元素是按.

    2022年6月9日
    27
  • 阿里云服务器如何配置开放端口

    阿里云服务器如何配置开放端口 1.进入ECS服务实例2.点击“资源管理”3.来到“实例”界面,点击“配置安全组规则”4.加入相应的端口号即可。5.这里说一句,避免入坑。你们别进到这个实例为0的安全组里面,这样你再

    2022年7月3日
    25
  • Java8学习笔记(一)–Lambda表达式

    Java8学习笔记(一)–Lambda表达式两个概念函数式接口函数式接口就是只显式声明一个抽象方法的接口。为保证方法数量不多不少,java8提供了一个专用注解,这样,当接口中声明的抽象方法多于或少于一个时就会报错。如下图所示:L

    2022年8月3日
    6
  • 八种方式实现跨域请求

    八种方式实现跨域请求前端开发中我们经常会遇到跨域请求的情况,处理跨域请求方式很多,特整理如下:浏览器的同源策略​提到跨域不能不先说一下”同源策略”。​何为同源?只有当协议、端口、和域名都相同的页面,则两个页面具有相同的源。只要网站的协议名protocol、主机host、端口号port这三个中的任意一个不同,网站间的数据请求与传输便构成了跨域调用,会受到同源策略的限制。​同源策略限制从

    2022年5月10日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号