203.移除链表元素
删除链表中的节点,需要将对应节点的头结点指向对应节点的下一个节点
ListNode* removeElements(ListNode* head, int val) {
ListNode* dummy=new ListNode(0);
dummy->next = head;
ListNode* cur=dummy;
while(cur->next !=nullptr)
{
if(cur->next->val == val)
{
cur->next=cur->next->next;
}
else
{
cur=cur->next;
}
}
head = dummy->next;
delete dummy;
return head;
}
206.反转链表
双指针法比较简单
ListNode* reverseList(ListNode* head) {
ListNode* pre=nullptr;
ListNode* cur=head;
ListNode* temp;
while(cur!=nullptr)
{
temp = cur ->next;
cur->next= pre;
pre = cur;
cur= temp;
}
return pre;
}
递归法
重在全局理解,不要太去细究递归干了什么
ListNode* reverseList(ListNode* head) {
if(head ==nullptr || head->next == nullptr) return head;
ListNode* last = reverseList(head->next);
head->next->next = head;
head->next = nullptr;
return last;
}
reverseList(head)函数指的是将以head为开头的链表反转,返回反转后的头结点。拿对于递归语句
ListNode* last = reverseList(head->next);
就是将head后面的节点全部反转并返回头结点last;
然后将head节点翻转后链入即可
head->next->next = head;
head->next =nullptr;