删除链表中的结点功能代码
//删除某个结点
void deleteNode(ListNode* node)
{
node->val = node->next->val;
node->next = node->next->next;
}
单链表反转函数代码
//单链表翻转,递归方式
ListNode* reverseList(ListNode* head)
{
ListNode* res;
if(head == null || head -> next == NULL)
return head; //头结点
res = reverseList(head->next); //递归到头结点
head->next->next = head; //反转结点
head->next = NULL; //头变尾
return res;
}
//循环方式
ListNode* reverseList(ListNode* head)
{
if(head == null || head -> next == null) // 空链表和单结点链表无需反转
return head;
ListNode* pre = null; //结果结点
ListNode* cur = head; //头结点临时变量
while(cur != null) //反转循环
{
ListNode* next= cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
return pre;
}
链表的中间结点代码:
双指针,快指针以慢指针2倍速度前行达到尾部,则慢指针达到中间
ListNode* middleNode(ListNode* head) {
ListNode* q; //快指针
ListNode* s; //慢指针
q = head;
s = head;
while(q != NULL && q->next != NULL)
{
q = q->next->next;
s = s->next;
}
return s;
}