假设有N个元素的数据,利用尾插法和头插法建立单链表
#include "stdafx.h"
#include<iostream>
using namespace std;
typedef struct node {
int data;
struct node *next;
}node,*LinkedList;
/*
尾插法建立单链表
*/
LinkedList createListR(LinkedList A, int a[], int n) {//要改变的变量使用引用型
LinkedList s, r;//s指向新申请的节点,r指向B的终端节点(最后的节点)
LinkedList head = A;
head = (LinkedList)malloc(sizeof(node));
head->next = NULL;
r = head;
for (int i = 0; i < n;i++) {
s = (LinkedList)malloc(sizeof(node));
s->data = a[i];
r->next = s;
r = r->next;
}
r->next = NULL;
return head;
}
/*
头插法建立单链表
*/
LinkedList createListF(LinkedList B,int a[],int n) {
LinkedList s;//s指向新申请的节点
LinkedList head = B;
head = (LinkedList)malloc(sizeof(node));
head->next = NULL;
for (int i = 0; i < n;i++) {
s = (LinkedList)malloc(sizeof(node));
s->data = a[i];
//下面这两行代码是头插法的关键部分
s->next = head->next;
head->next = s;
}
return head;
}
/*
展示单链表
*/
void showList(LinkedList head) {
LinkedList t = head->next;
while (t!=NULL) {
cout << t->data << " ";
t = t->next;
}
}
int main()
{
cout << "程序开始:" << endl;
int a[] = {1,2,3,4};
//拿到数组中元素的个数
int size = sizeof(a) / sizeof(int);
//cout << size << endl;
//尾插法建立单链表
LinkedList A=NULL,B=NULL;
LinkedList Ahead= createListR(A,a,size);
cout << "尾插法:" << endl;
showList(Ahead);
cout << "\n头插法:" << endl;
LinkedList Bhead = createListF(B,a,size);
showList(Bhead);
int f;
cin >> f;
return 0;
}
#include "stdafx.h"