/*
在一个递增有序的单链表中
有数值相同的元素存在
目标:删除数值相同的元素,使表中不再有重复的元素
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct _node{
int data;
struct _node * next;
}Node;
/*
自动生成(1,2,3,4,5,6,7,8,9,10)链表
*/
//尾插法:创建一个递增有序的单链表
Node* last_create()
{
Node *head = (Node*)malloc(sizeof(Node));
head->data = 10;//带头结点,头结点data存链表长度
//head->next = NULL;//头结点next指向NULL
Node *last=head;
for(int i=1;i<11;i++)
{
Node *p = (Node*)malloc(sizeof(Node));
p->data = i;
p->next = NULL;
last->next = p;
last = last->next;
}
return head;
}
//头插法:创建一个递增有序的单链表
Node* head_create()
{
Node *head = (Node*)malloc(sizeof(Node));
head->data = 10;//带头结点,头结点data存链表长度
head->next = NULL;//头结点next指向NULL
for(int i=1;i<11;i++)
{
Node *p = (Node*)malloc(sizeof(Node));
p->data = i;
p->next = NULL;
if(head->next==NULL)
{
//当前列表只有头结点
head->next = p;
}
else{
p->next = head->next;
head->next = p;
}
}
return head;
}
/*
按照输入自定义生成链表
*/
//头插法:输入-1时停止
Node* head_create_diy()
{
Node *head = (Node*)malloc(sizeof(Node));
head->data = 0;//带头结点,头结点data存链表长度暂设为0
head->next = NULL;//头结点next指向NULL
int input;
int length=0;
do
{
scanf("%d",&input);
Node *p = (Node*)malloc(sizeof(Node));
p->data = input;
p->next = NULL;
if(head->next==NULL)
{
//当前列表只有头结点
head->next = p;
}
else{
p->next = head->next;
head->next = p;
}
length++;
}while(input!=-1);
head->data=length;
return head;
}
//尾插法:输入-1时停止
Node* last_create_diy()
{
Node *head = (Node*)malloc(sizeof(Node));
head->data = 0;//带头结点,头结点data存链表长度暂设为0
head->next = NULL;//头结点next指向NULL
Node *last=head;
int input;
int length=0;
do
{
scanf("%d",&input);
Node *p = (Node*)malloc(sizeof(Node));
p->data = input;
p->next = NULL;
last->next = p;
last = last->next;
length++;
}while(input!=-1);
head->data=length;
return head;
}
//按顺序打印整个链表
bool printlist(Node* list)
{
if(list==NULL)
return false;
else
{
Node* p = list->next;//直接从头结点后面一个节点开始访问,因为头结点存的是长度
while(p!=NULL)
{
printf("%d\n",p->data);
p = p->next;
}
return true;
}
}
int main()
{
Node *head = last_create_diy();
printlist(head);
return 0;
}
/*
实现:
利用一个Node类型的指针,代表一个链表Linklist,更易读
Linklist是一个_node类型的指针类型(一种特殊类型的指针)
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct _node{
int data;
struct _node* next;
}Node,*Linklist;//Linklist是一个_node类型的指针类型(一种特殊类型的指针)
/*
自定义输入节点信息创建链表
PS.带头结点
*/
//尾插法
Linklist last_create()
{
Linklist L = (Node*)malloc(sizeof(Node));
Node* last = L;
L->data = 0;
L->next = NULL;
int length=0;
int input;//放在while外面,因为do执行完了要作为条件判断
do{
scanf("%d",&input);
Node *p = (Node*)malloc(sizeof(Node));
p->data = input;
p->next = NULL;
last->next = p;
last = last->next;
length++;
}while(input!=-1);
L->data = length;
return L;
}
//头插法
Linklist head_create()
{
Linklist L = (Node*)malloc(sizeof(Node));
L->data = 0;
L->next = NULL;
int length;
Node* head = L;
int input;
do{
scanf("%d",&input);
Node* p = (Node*)malloc(sizeof(Node));
p->data = input;
p->next = head->next;
head->next = p;
length++;
}while(input!=-1);
L->data = length;
return L;
}
//遍历输出
bool print(Linklist L)
{
if(L->data==0)
return false;
else{
Node *p = L->next;
while(p!=NULL)
{
printf("%d\n",p->data);
p = p->next;
}
}
}
int main()
{
Linklist L = last_create();
print(L);
return 0;
}