我们需要前后指针对这个链表遍历,是val的节点就解除链表,不是的前后指针都走一步
(特殊情况,刚开始的头节点刚好等于val,这个时候就要把头节点向前挪动,前指针不挪动。
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* prev = NULL,* cur = head;
while(cur)
{
if(cur->val==val)
{
if(prev==NULL)
{
cur = cur->next;
free(head);
head = cur;
}
else
{
prev->next = cur->next;
free(cur);
cur = prev->next;
}
}
else
{
prev = cur;
cur = cur->next;
}
}
return head;
}
把next的指向换一下位置就行了
struct ListNode* reverseList(struct ListNode* head) {
if(head==NULL)
return NULL;
struct ListNode*n1= NULL;
struct ListNode*n2 = head;
struct ListNode*n3 = head->next;
while(n2)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3)
n3 = n3->next;
}
return n1;
}