阿里提前批笔试

实现单链表

#include "stdafx.h"
#include <string>
#include <vector>
#include <set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include<cmath>
#include<sstream>
#include <bitset>

using namespace std;

// 设计实现一个整数单链表类型 slist, 实现如下几个方法, 并添加适当的测试代码示例。
// 注意:严格按函数声明实现,不可修改函数签名。
struct slist_node
{
	int m_nValue;
	slist_node* m_pNext;

	slist_node(int temValue):m_nValue(temValue),m_pNext(NULL){

	}
};

typedef struct slist_node* slist;

// 创建空链表。
slist slist_create();

slist slist_create()
{
	slist newSlist = new slist_node(0);
	return newSlist;
}

// 销毁链表。
void slist_destroy(slist* pList);

void slist_destroy(slist* pList)
{
	delete **pList;
}

// 打印链表, 用 "(", ")" 括起来, 元素之间用空格分割。如 "()" "(1 3 )" 等。
void slist_print(slist a);

void slist_print(slist a)
{
	cout<<"(";
	while (a != NULL)
	{
		cout<<a->m_nValue<<" ";
		a = a->m_pNext;
	}
	cout<<")";
}

// 添加一个整数到链表头。
void slist_push(slist* pList, int n);

void slist_push(slist* pList, int n)
{
	slist topSlist = new slist_node(n);
	topSlist->m_pNext = *pList;
	*pList = topSlist;
	delete topSlist;
}

// 将链表中的整数从小到大排序。自己实现排序,不要调用库函数,不要使用数组。
void slist_sort(slist* pList);

void slist_sort(slist* pList)
{
	if (pList==NULL || *pList==NULL || (*pList)->m_pNext==NULL)
	{
		return;
	}
	slist head = new slist_node(0);
	head->m_pNext = *pList;
	//冒泡排序法
	slist tail = NULL;
	slist curNode = head->m_pNext;
	while(curNode != tail)
	{
		while (curNode != tail)
		{
			if (curNode->m_pNext == tail)
			{
				tail = curNode;
				break;
			}
			else if (curNode->m_nValue <= curNode->m_pNext->m_nValue)
			{
				curNode = curNode->m_pNext;
			}
			else
			{
				int nTemNode = curNode->m_nValue;
				curNode->m_nValue = curNode->m_pNext->m_nValue;
				curNode->m_pNext->m_nValue = nTemNode;
				curNode = curNode->m_pNext;
			}
		}
		curNode = head->m_pNext;
	}
	*pList = head->m_pNext;
}

int	main()
{
	slist testNode1 = new slist_node(3);
	slist testNode2 = new slist_node(2);
	slist testNode3 = new slist_node(6);
	slist testNode4 = new slist_node(4);

	testNode1->m_pNext = testNode2;
	testNode2->m_pNext = testNode3;
	testNode3->m_pNext = testNode4;

	slist* testNode = &testNode1;
	slist_sort(testNode);
	slist_print(testNode1);

	delete testNode1;
	delete testNode2;
	delete testNode3;
	delete testNode4;
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值