算法笔记--链表遍历

建立一个升序链表并遍历输出

1.单链表结点定义

typedef struct LNode{
	int data;
	struct LNode *next;
};

2.假设有n个元素已经存储在数组a中,用尾插法建立链表C

void createlistR(LNode *&C,int a[],int n){
	LNode *s,*r;    //s用来指向新申请的结点,r始终指向C的终端结点 
	int i;
	C=(LNode*)malloc(sizeof(LNode));  //申请C的头结点空间 
	C->next = NULL;
	r=C;  //r指向头结点,因为此时头结点就是终端结点 
	for(i=0;idata = a[i];  //用新申请的结点来接收a中的一个元素 
		r->next = s;  //用r来接纳新结点 
		r=r->next;  //r指向终端结点,以便于接纳下一个到来的结点 
	}
	r->next = NULL;  //数组a中所有的元素都已经装入链表C中,C的终端
	               //结点的指针域置为NULL,C建立完成 
}

3.打印链表中的数据

void print(LNode *head){
	head = head->next;
	while(head!=NULL){
		cout<data<<" ";
		head=head->next;
	}
	cout<

算法笔记--链表遍历_第1张图片

思路一:先将数据排好序,利用尾插法依次插入到链表中

思路二:边判断边插入

思路一代码:

#include
#include
using namespace std;
typedef struct LNode{
	int data;
	struct LNode *next;
};
void createlistR(LNode *&C,int a[],int n){
	LNode *s,*r;//s用来指向新申请的结点,r始终指向C的终端结点 
	int i;
	C=(LNode*)malloc(sizeof(LNode));//申请C的头结点空间 
	C->next = NULL;
	r=C;//r指向头结点,因为此时头结点就是终端结点 
	for(i=0;idata = a[i];//用新申请的结点来接收a中的一个元素 
		r->next = s;//用r来接纳新结点 
		r=r->next;//r指向终端结点,以便于接纳下一个到来的结点 
	}
	r->next = NULL;//数组a中所有的元素都已经装入链表C中,C的终端
	               //结点的指针域置为NULL,C建立完成 
}
void print(LNode *head){
	head = head->next;
	while(head!=NULL){
		cout<data<<" ";
		head=head->next;
	}
	cout<next = NULL;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i

思路二部分代码:

void insertNode(LNode *head , int data) {
    LNode *p = head;
    while (p->next != NULL && p->next->data < data) {
        p = p->next;
    }
    LNode *temp = (LNode*)malloc(sizeof(LNode));
    temp->data = data;
    temp->next = p->next;
    p->next = temp;
}

 

你可能感兴趣的:(算法学习)