- 论坛徽章:
- 0
|
实现了一个删除的方法,代码如下:
- llink delnode(llink head,int pos)
- {
- llink ptr;
- int n = 1;
- while (head != NULL )
- {
- if (pos == 1)
- {
- ptr = head;
- head = head->next;
-
- printf("[%d][%d]\n",ptr,head->num);
- free(ptr);
- return head;
- }
- if (n == pos - 1){
- ptr = head->next;
- head->next = ptr->next;
- free(ptr);
- return head;
- }
- head = head->next;
- n++;
- }
- }
复制代码
当如下调用的时候:
delnode(head, 2);
printf("\n删除后的: ");
printllist(head);
输出:[1][3][4][5][6]
但如果这样调用:
delnode(head, 1);
printf("\n删除后的: ");
printllist(head);
输出:[0][[2]3][4][5][6]
但期望的确是:[2]3][4][5][6]
请大家帮我找下原因,该如何修改。
- struct llist /* 串列结构宣告 */
- {
- int num; /* 邮寄编号 */
- struct llist *next; /* 指向下一标签 */
- };
- typedef struct llist node; /* 定义新型态 */
- typedef node *llink; /* 定义新型态指标 */
- llink createllist(int *array,int len)
- {
- llink head; /* 串列的开始指标 */
- llink ptr,ptr1;
- int i;
- /* 建立第一个节点 */
- head = ( llink ) malloc(sizeof(node)); /* 配置记忆体 */
- if ( !head ) /* 检查指标 */
- return NULL;
- head->num = array[0]; /* 建立节点内容 */
- head->next = NULL; /* 设定指标初值 */
- ptr = head; /* 将ptr指向串列开始 */
- for ( i = 1; i < len; i++ ) /* 建立其它节点回路 */
- {
- ptr1 = ( llink ) malloc(sizeof(node));
- if ( !ptr1 )
- return NULL;
- ptr1->num = array[i]; /* 建立节点内容 */
- ptr1->next = NULL; /* 设定指标初值 */
- ptr->next = ptr1; /* 连结节点 */
- ptr = ptr->next; /* 指向下一节点 */
- }
- return head;
- }
复制代码
完整代码附件! |
|