链表

总共有 类

CreatList反向链表

/*
  老师写的
*/
#include<stdio.h>
#include<stdlib.h> 
struct ListNode  
{  
    int val;              
    struct ListNode * next; //指向下一节点的指针  
}; 
struct ListNode *CreateListNode() {
        struct ListNode *Node = (struct ListNode *)malloc(sizeof(struct ListNode));
        int data;
        scanf("%d", &data);       
        Node->val = data;
        Node->next = NULL;
        return Node;
}
struct ListNode *CreateList(struct ListNode * Head) {
        struct ListNode *rear;
        int i, n;
        rear = Head;
        scanf("%d", &n);       
        for (i=0; i<n; i++)
        {
            struct ListNode * newNode = CreateListNode(); 
			   newNode->next = rear->next;
			   rear->next = newNode;
			   rear = newNode;	
        }
}
void InsertNodeLocate(struct ListNode* Head){
	int pos;
	scanf("%d",&pos);
	struct ListNode* p=Head;
	struct ListNode* posNode=Head->next;
	int i=0;
	for(i;i<pos-1;i++){
		p=p->next;
		posNode=posNode->next;
	}
	struct ListNode* newNode=CreateListNode();
	p->next=newNode;
	newNode->next=posNode;
}
int main(){
	struct ListNode *head=(struct ListNode *)malloc(sizeof(struct ListNode));
	CreateList(head);
	return 0;
}


/*
  我写的
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct list{
	int data;
	struct list *next;
} l;
l *creatnode(){
	l *node = (l *)malloc(sizeof(l));
	int x;
	scanf("%d",&x);
	node->data = x;
	node->next = NULL;
	return node;
}
void creatlist(l* Head){
	l *rear,*newnode;
	int n,i;
	rear = Head;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		newnode = creatnode();
		rear->next = newnode;
		rear=newnode;
	} 
}
int main(){
	l *head=(l*)malloc(sizeof(l));
	creatlist(head);
	
	return 0;
}

CreatList正向链表

#include<stdio.h>
typedef struct list{
	int data;
	struct list *next;	
	
}l ; 
void creatlist(l* Head){
	int n,i;
	l *p1,*p2;
	p1=p2=Head;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&p2->data);
		p1 = (l *)malloc(sizeof(l));
		p2->next = p1;
		p2 = p1;
	}
}
int main(){
	l *head=(l *)malloc(sizeof(l));
	creatlist(head);
	
	return 0;
}

最初的想法

/*
  想得很多但错误点也很多
*/
#include<bits/stdc++.h>
#include<stdlib.h>
#include<iostream> 
#include<stdio.h>
using namespace std;
typedef struct ListCheat{
	int number;
	struct ListCheat *next; 
}List;
class ManageList{
	private:
	List *_Head;
	int NodeNums;
	public:
		List *CreatNode();
		List *CreatHead();
		void CreatList();
		void InsertListNode();
		void DeleteListNode();
		void ClearList();
		void ClearList_and_Head(List *Head);
		void CinClear();
		void ShowTheList();
};
List *ManageList::CreatNode() {
	List *Head = (List *)malloc(sizeof(List));
	int data;
	scanf("%d",&data);
	Head->number = data;
	Head->next = NULL;
	return Head;
}
List *ManageList::CreatHead(){
	List *head = (List *)malloc(sizeof(List));
	return head;
}
void ManageList::CreatList(){
	cout<<"请输入你要创建的链表的个数:"<<endl; 
	int n,i;
	cin>>n;
	NodeNums=n;
	List *NewNode,*OldNode;
	_Head = CreatHead();
	OldNode = _Head;
	for(i=0;i<n;i++){
		printf("第%d个数据:\n",i+1);
		NewNode =  CreatNode();
		OldNode->next = NewNode;
		OldNode = NewNode;
	}
}
void ManageList::InsertListNode(){
	NodeNums++; 
	cout<<"请输入你要插入节点的位置:"<<endl;
	int k,i;
	scanf("%d",&k);
	List *head,*rear;
	head = _Head;
	rear = _Head->next ;
	for(i=1;i<k;i++){
		head = head->next ;
		rear = rear->next ;
	} 
	cout<<"请输入你要插入的内容:"<<endl;
	List *NewNode = CreatNode();
	head->next = NewNode;
	NewNode->next = rear;
}
void ManageList::DeleteListNode(){
	NodeNums--;
	cout<<"请输入你要删去节点的位置:"<<endl;
	int i,k;
	scanf("%d",&k);
	List *head,*rear;
	head = _Head;
	rear = _Head->next ;
	for(i=1;i<k;i++){
		head = head->next ;
		rear = rear->next ;
	}
	head->next = rear->next ;
}
void ManageList::ClearList(){
	NodeNums=1;
	List *rear,*head;
	head = _Head->next ;
	while(head != NULL){
		rear = head->next ;
		free(head);
		head = rear;
	}
} 
void ManageList::ClearList_and_Head(List *Head){
	NodeNums=0;
	int flag=0;
	if(Head == NULL){
		if(flag == 0) printf("没有Head了\n");
		return;
	} 
	ClearList_and_Head(Head->next);
	free(Head);
	flag=1;
}
void ManageList::CinClear(){
	List *head;
	head = _Head;
	ClearList_and_Head(head);
}
void ManageList::ShowTheList(){
	cout<<"链表的数据如下:"<<endl;
	int i; 
	List *rear;
	rear=_Head->next ;
	for(i=1;i<=NodeNums;i++){
		cout<<"第"<<i<<"个为:"<<endl;
		printf("%d\n",rear->number);
		rear = rear->next ;
	}
	cout<<"总计为"<<NodeNums<<"个"<<endl;
}
int main(){
	ManageList kit;
	string str;
	while(1){
		cin>>str;
		if(str == "creat"){
			kit.CreatList();
		}
		else if(str == "insert"){
			kit.InsertListNode();
		}
		else if(str == "delete"){
			kit.DeleteListNode();
		}
		else if(str == "clear"){
			kit.ClearList();
		}
		else if(str == "clear-and-head"){
			kit.CinClear();
		}
		else if(str == "show"){
			kit.ShowTheList();
		} 
		else if (str == "over") break;
		else printf("没有找到相关的指令\n");
	}
	return 0;
}
posted @ 2022-11-06 14:42  MITE's_BKY  阅读(31)  评论(0)    收藏  举报