單鏈表逆序

#答案有點問題,原本個人單鏈表是帶頭指針的,逆轉後沒有頭指針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;

}

相關文章
相關標籤/搜索