天天看点

C语言:链表,尾插法

2019/3/29

尾插法

C语言:链表,尾插法
#include<iostream>
using namespace std;
typedef struct LNode {
	int data;
	struct LNode *next;
} LinkNode;
//尾插法
void CreateListR(LinkNode * &L, int a[], int n) {
	LinkNode *s, *r;
	L = (LinkNode *)malloc(sizeof(LinkNode));
	r = L;
	for(int i = 0; i < n; i++) {
		s = (LinkNode *)malloc(sizeof(LinkNode));
		s->data = a[i];
		r->next = s;
		r = s;
	}
	r->next = NULL;
}
void InitList(LinkNode * &L) {
	L = (LinkNode *)malloc(sizeof(LinkNode));
	L->next = NULL;
}
void DispList(LinkNode * L) {
	LinkNode *p = L->next;
	while(p != NULL) {
		cout << p->data;
		p = p->next;
	}
	cout << endl;
}
int main() {
	LinkNode *h;
	InitList(h);
	int a[10] = {0};
	CreateListR(h, a, 10);
	DispList(h);
	return 0;
}
           

2019/3/19

链表的插入结点操作:

C语言:链表,尾插法
C语言:链表,尾插法

删除结点:

C语言:链表,尾插法
#include<stdio.h>
#include<stdlib.h>
//初始化五个节点
struct node
{
	int data;
	node *next;
};
int main()
{
	node *head,*p1,*p2;
	int i;
	head = 0; //头结点初始化 
	for (i = 1; i <= 5; i++)
	{
		p1 = (node *)malloc(sizeof(node)); //开辟新空间 
		p1->data = i;
		if(head == 0) 
		{
			head = p1; //头指针指向p1结点 
			p2 = p1; //p2也指向p1结点(为"p2->next = p1"作准备) 
            //p1->next = p1不可取,因为每次p1是新的 
			//并不可以取消掉p2, 
		}
		else
		{
			p2->next = p1; //尾结点p2连上下一个新结点p1 
			p2 = p1; //p2指向新结点p1(为下一个连接作准备) 
            //因为每次p1都在更新,所以每次需要p2来进行中介的指向操作
		}
	}
	p2->next = 0;
	
	//删除数据为2的链表结点
	p1 = head;
	while(p1->data != 2)
	{
		p2 = p1;
		p1 = p1->next;	
	} 
	p2->next = p1->next; //将p1->next(也就是3)连接上p2->next(p2是1,p2->next被赋值为3) 
	delete p1; //删除2 
	
	//输出链表数据
	node *p;
	p = head;
	printf("链表上各结点的数据为:");
	while(p != 0)
	{
		printf("%d ",p->data);
		p = p->next;
	} 
	printf("\n");
	re
           

百度文库上的一个PPT:https://wenku.baidu.com/view/d6c490e0ba4cf7ec4afe04a1b0717fd5370cb24a.html

C语言:链表,尾插法
C语言:链表,尾插法
C语言:链表,尾插法
C语言:链表,尾插法

继续阅读