问题1:
调试:
从代码调试可以看到,5这个节点的next指针一直指向6这个节点,就算函数执行完成后也并没有把5这这个节点的next指针置为NULL,所以在打印的时候还是会打印出6。
问题2:
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
//创建新的链表,将不是val的值插入到新的链表中
ListNode* newHead,*newTail;
newHead = newTail = NULL;
//创建临时变量来遍历原链表的节点
ListNode* pcur = head;
while(pcur)
{
//判断当前节点的val值是不是val
if(pcur->val != val)
{
//将该节点插入到新的链表中
//判断新链表是否为空
if(newHead == NULL)
{
newHead = newTail = pcur;
}
else//链表不为空
{
newTail->next = pcur;
//尾节点向后走
newTail = newTail->next;
}
}
//向后遍历
pcur = pcur->next;
}
//判断新链表是否为空
if(newTail)
//空指针不能解引用操作,所以新链表的最后一个节点的next指针指向NULL
newTail->next = NULL;
//返回新链表的头节点
return newHead;
}