user-0 提问: 数据结构  求大佬帮我看看这道题  想了好久  新手

回复:
user: user-1
content: 有两个链表指针p和s 定义变量j 如果i<0就不需要输出 i=0删除第一个结点 否则j<i时p用来指向前驱结点 知道j>i或者s中数据全部查完 如果没查找到删除的结点 将不能删除 否则p. next=s. next 释放要删除的s结点

user: user-0
content: 引用 21 楼 user-2的回复:[quote=引用 17 楼 user-2 的回复:] i>1的时候就不用删除第0个结点。写错了，应该是i>0。  标题下面右边有个结贴。结贴会返还%50积分。  不能，除非你在发一个帖子。即使是10积分也行。[/quote] 我发了你看看  我还是找不到那个

user: user-2
content: 引用 17 楼 user-2 的回复:i>1的时候就不用删除第0个结点。写错了，应该是i>0。  标题下面右边有个结贴。结贴会返还%50积分。  不能，除非你在发一个帖子。即使是10积分也行。

user: user-0
content: 引用 17 楼 user-2的回复:i>1的时候就不用删除第0个结点。 我能再问你一道逆置算法的题么

user: user-0
content: 引用 17 楼 user-2的回复:i>1的时候就不用删除第0个结点。 怎么 把 积分给你啊

user: user-0
content: 引用 17 楼 user-2的回复:i>1的时候就不用删除第0个结点。 好的  懂了  谢谢你啊

user: user-2
content: i>1的时候就不用删除第0个结点。

user: user-0
content: 引用 14 楼 user-2的回复:delete(LinkList* q, int i) {  //在无头结点的单链表中删除第i个结点 	LinkList* p, * s; 	int  j; 	if (i < 0)// 小于就不合法了。 		printf("Can't delete"); 	else if (i = = 0) {// 等于0说明要删除第0个结点 		s = q;// q就是要删除的结点，用s指向它 		q = q->next;// 既然q要删除，但是后面还有结点不能丢，所有q向后移一位，记录它，否则链表就丢失了 		free(s);// 释放要删除的结点 	} else { 		j = 0;// 计数         s = q;// 指向当前结点，经过下面的循环后就会指向要删除的结点 		while ((j < i) && (s!= NULL)) {// 找到第i个结点 			p = s;// p指向要删除的结点的前面一个结点 			s = s->next;// s后移一个结点 			j++;// 个数加1，知道退出循环说明找到了 		}         s指向的就是第i个结点，即要删除的结点 		if (s = = NULL)// 不合法 			printf("Cant't  delete"); 		else {// 合法，那么就要删除他 			p->next = s->next;// 将s前面的结点和后面的结点连接起来 			free(s);// 释放要删除的节点 		} 	} } 我还有一点不明白  为什么要删除0结点啊？

user: user-2
content: 引用 13 楼 weixin_44787439 的回复:[quote=引用 11 楼 user-2的回复:][quote=引用 9 楼 weixin_44787439 的回复:] [quote=引用 8 楼 user-2的回复:]无头结点就是说，链表的第一个结点也保存数据 那为什么要删除第一个结点[/quote]我什么时候说要删除第一个结点了。我感觉你是抄的代码[/quote] 不是抄的  老师给的  [/quote]抱歉说错话了。

user: user-2
content: delete(LinkList* q, int i) {  //在无头结点的单链表中删除第i个结点 	LinkList* p, * s; 	int  j; 	if (i < 0)// 小于就不合法了。 		printf("Can't delete"); 	else if (i = = 0) {// 等于0说明要删除第0个结点 		s = q;// q就是要删除的结点，用s指向它 		q = q->next;// 既然q要删除，但是后面还有结点不能丢，所有q向后移一位，记录它，否则链表就丢失了 		free(s);// 释放要删除的结点 	} else { 		j = 0;// 计数         s = q;// 指向当前结点，经过下面的循环后就会指向要删除的结点 		while ((j < i) && (s!= NULL)) {// 找到第i个结点 			p = s;// p指向要删除的结点的前面一个结点 			s = s->next;// s后移一个结点 			j++;// 个数加1，知道退出循环说明找到了 		}         s指向的就是第i个结点，即要删除的结点 		if (s = = NULL)// 不合法 			printf("Cant't  delete"); 		else {// 合法，那么就要删除他 			p->next = s->next;// 将s前面的结点和后面的结点连接起来 			free(s);// 释放要删除的节点 		} 	} }

user: user-0
content: 引用 11 楼 user-2的回复:[quote=引用 9 楼 weixin_44787439 的回复:] [quote=引用 8 楼 user-2的回复:]无头结点就是说，链表的第一个结点也保存数据 那为什么要删除第一个结点[/quote]我什么时候说要删除第一个结点了。我感觉你是抄的代码[/quote] 不是抄的  老师给的

user: user-2
content: 你还是用IDE调试吧。清晰明了。  另外：请将以前的帖子结了。

user: user-2
content: 引用 9 楼 weixin_44787439 的回复:[quote=引用 8 楼 user-2的回复:]无头结点就是说，链表的第一个结点也保存数据 那为什么要删除第一个结点[/quote]我什么时候说要删除第一个结点了。我感觉你是抄的代码

user: user-2
content: 引用 7 楼 weixin_44787439 的回复:else j=0;s=q这里不太明白j=0，就是计数用的，不然你怎么知道你找了多少个了。 s是用来记录你找到的第i个结点，也就是要删除的结点。

user: user-0
content: 引用 8 楼 user-2的回复:无头结点就是说，链表的第一个结点也保存数据 那为什么要删除第一个结点

user: user-2
content: 无头结点就是说，链表的第一个结点也保存数据

user: user-0
content: 引用 5 楼 user-2的回复:感觉我说了和没说一样，自我感觉。主要是我不知道说啥。都能看出来。干脆你直接说那一行吧 else j=0;s=q这里不太明白

user: user-0
content: 引用 4 楼 user-2的回复:delete(LinkList* q, int i) {  //在无头结点的单链表中删除第i个结点 	LinkList* p, * s; 	int  j; 	if (i < 0) 		printf("Can't delete"); 	else if (i = = 0) { 		s = q;// 指向要删除的结点 		q = q->next;// 头指针指向下一个结点，即新的头 		free(s);// 释放结点 	} else { 		j = 0; s = q; 		while ((j < i) && (s!= NULL)) {// 找到第i个结点 			p = s; 			s = s->next; 			j++; 		} 		if (s = = NULL) 			printf("Cant't  delete"); 		else { 			p->next = s->next;// 跳过s，因为它要删除 			free(s); 		} 	} } 无头结点就是要删除第一个结点么？

user: user-2
content: 感觉我说了和没说一样，自我感觉。主要是我不知道说啥。都能看出来。干脆你直接说那一行吧

user: user-2
content: delete(LinkList* q, int i) {  //在无头结点的单链表中删除第i个结点 	LinkList* p, * s; 	int  j; 	if (i < 0) 		printf("Can't delete"); 	else if (i = = 0) { 		s = q;// 指向要删除的结点 		q = q->next;// 头指针指向下一个结点，即新的头 		free(s);// 释放结点 	} else { 		j = 0; s = q; 		while ((j < i) && (s!= NULL)) {// 找到第i个结点 			p = s; 			s = s->next; 			j++; 		} 		if (s = = NULL) 			printf("Cant't  delete"); 		else { 			p->next = s->next;// 跳过s，因为它要删除 			free(s); 		} 	} }