单链表逆序

#答案有点问题,原本个人单链表是带头指针的,逆转后没有头指针node

#include<stdlib.h>数组

#include<stdio.h>指针

//定义数组的大小为100code

//头结点:有时,在链表的第一个结点以前会额外增设一个结点,索引

//结点的数据域通常不存放数据(有些状况下也能够存放链表的长内存

//度等信息),此结点被称为头结点。element

//若头结点的指针域为空(NULL),代表链表是空表。头结点对于链表来讲get

//,不是必须的,在处理某些问题时,给链表添加头结点会使问题变得简单。it

//头指针:永远指向链表中第一个结点的位置(io

//若是链表有头结点,头指针指向头结点;不然,头指针指向首元结点)。

typedef int elementType;

typedef struct Lnode {

//存储的数据 

elementType data;

//存储下一个指针 

struct Lnode *next;

}LinkList;

LinkList* init(LinkList *head) {

head = (LinkList *)malloc(sizeof(LinkList));

if (head == NULL)

{
	printf("内存没啦");
	
	return NULL;
}

head->next = NULL;

printf("初始化成功\n");

return head;

}

void insert(LinkList *head, elementType x, int i) {

if (i < 0) {

	printf("插入的位置不能为负数\n");
	
	return;
}

int j = -1;

LinkList *p, *s;

p = head;

while (p->next != NULL && j < i - 1) {

	p = p->next;
	j++;
}

if (j != i - 1)
{
	printf("插入位置有误\n");
	return;
}

s = (LinkList *)malloc(sizeof(LinkList));

if (s == NULL) {

	printf("内存没了");
	return;
}
s->data = x;

s->next = p->next;

p->next = s;


printf("插入成功\n");

}

//根据索引取值 ,咱们没有判断索引的位置是否有问题

int getItem(LinkList *head, int i) {

LinkList *p = head;

int j = -1;

while (p != NULL && j < i-1) {

	j++;
	
	p = p->next;
	
}
//这个地方返回-1是一个bug 

if (j != i-1)

	return -1;

return p->data;

}

void delete1(LinkList *head, int i) {

int j = -1;

LinkList *p, *s;

p = head;

while (p->next != NULL && j < i - 1) {

	p = p->next;
	
	j++;
	
}
if (j != i - 1) {

	printf("删除位置有误\n");
	
	return;

}
if (p->next == NULL)

{
	printf("位置不存在\n");
	
	return;
}

s = p->next;

p->next = s->next;

free(s);

return;

} LinkList *reverse(LinkList *head) {

LinkList *prev = NULL;

LinkList *cur = head;

LinkList *tmp;



while (cur) {

	tmp = cur->next;
	
	cur->next = prev;
	
	prev = cur;
	
	cur = tmp;
	
}

return prev;

} int main() {

//建立一个空表 

LinkList *head=NULL;

head = init(head);

for (int i = 0; i < 10; i++)

	insert(head, i + 1, i);

LinkList *te = reverse(head);

int x;
//   
//   delete1(head,11);
for (int i = 0; i < 10; i++) {


	x = getItem(te, i);
	printf("%d\n", x);

}
getchar();

return 0;

}

相关文章
相关标签/搜索