总共有 类
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;
}