返回链表的中间节点java_删除链表中间的节点

我写了一段使用链表的代码 . 我让用户输入几个数字,然后要求用户输入他希望删除的数字的索引 . 我做了一些研究,发现我需要检查下一个节点是否是我要删除的节点,然后有2个临时指针指向当前节点和下一个节点(我想要删除的节点),然后将第一个临时指针的下一个节点分配给第二个临时指针的下一个节点,然后最后释放第二个临时指针 . 这是我的代码:

#include

#include

typedef struct node

{

int item;

struct node *next;

}ListNode;

void print(ListNode *head);

int deleteNode(ListNode **ptrHead, int index);

int main()

{

int n;

int remove;

ListNode *head = NULL;

ListNode *temp = NULL;

printf("Enter a value: ");

scanf("%d", &n);

while (n != -1)

{

if (head == NULL)

{

head = malloc(sizeof(ListNode));

temp = head;

}

else

{

temp->next = malloc(sizeof(ListNode));

temp = temp->next;

}

temp->item = n;

temp->next = NULL;

printf("Enter a value: ");

scanf("%d", &n);

}

printf("Enter index to remove: ");

scanf("%i", &remove);

while (remove != -1)

{

deleteNode(&head, remove);

print(head);

printf("Enter index to remove: ");

scanf("%i", &remove);

}

while (head != NULL)

{

temp = head;

head = head->next;

free(temp);

}

head = NULL;

return 0;

}

int deleteNode(ListNode **ptrHead, int index)

{

int count = 0;

ListNode* temp1 = NULL;

ListNode* temp2 = NULL;

while (count <= index)

{

if (index == 0)

{

temp2 = (*ptrHead)->next;

free((*ptrHead));

(*ptrHead) = temp2;

return 0;

break;

}

if (count+1 == index)//checking for the node ahead

{

temp1 = (*ptrHead);

temp2 = (*ptrHead)->next;//the one to free

temp1->next = temp2->next;

free(temp2);

return 0;

break;

}

(*ptrHead) = (*ptrHead)->next;

count++;

}

return -1;

}

void print(ListNode *head){

if (head == NULL)

{

return;

}

while (head != NULL)

{

printf("%i\n", head->item);

head = head->next;

}

}

因此,例如,如果我输入1 2 3 4 5 -1,链表将包含1 2 3 4 5.然后,如果我输入0表示要删除的索引,程序将打印出2 3 4 5.这是否有效输入0或1.但是,当我输入索引2及以上时,它给出了奇怪的输出,例如,如果我将链表设置为1 2 3 4 5,并输入索引2以删除,通过权限它应该输出1 2 4 5,但它输出2 4 5,我不知道最新情况,请指出我正确的方向 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值