设计新颖的网站建设,苏州建设网站公司在什么地方,北京网页制作网站,枣阳做网站迭代方法
1. 第m个节点的前一个节点pre和第n个节点#xff1b;
2. 将第m个节点到第n个节点的链表部分反转#xff1b;
3. 将pre节点的next指向反转后链表的头节点#xff0c;将反转后链表的尾节点的next指向n1节点。
/*** struct ListNode {* int val;* struct ListNode…
迭代方法
1. 第m个节点的前一个节点pre和第n个节点
2. 将第m个节点到第n个节点的链表部分反转
3. 将pre节点的next指向反转后链表的头节点将反转后链表的尾节点的next指向n1节点。
/*** struct ListNode {* int val;* struct ListNode *next;* };*/#include bits/types/struct_tm.h
#include cstddef
class Solution {
public:/*** * param head ListNode类 * param m int整型 * param n int整型 * return ListNode类*/ListNode* reverseBetween(ListNode* head, int m, int n) {// write code hereListNode *new_headnew ListNode(-1);//设置虚拟头节点ListNode *start, *tmp, *phead;new_head-nexthead;//找到区间左端点pheadnew_head;starthead;//start从第一个元素开始for(int i1; im; i){pheadstart;startstart-next;}for(int j1; jn-m; j){tmpstart-next;start-nexttmp-next;tmp-nextphead-next;phead-nexttmp;}return new_head-next;}
};
设置虚拟头结点的作用
1. 简化链表操作
在链表操作中如果不使用虚拟头结点我们需要针对头节点和其他节点分别进行操作这会导致代码的重复和冗余。而设置虚拟头结点后我们可以将头节点和其他节点一视同仁从而简化链表操作的实现。
2. 处理边界情况
当链表为空时我们需要特殊处理头节点。如果使用虚拟头结点我们可以省去这个特判因为虚拟头结点始终存在。
3. 方便删除操作
在链表中删除头节点时需要特殊处理。如果使用虚拟头结点我们可以将虚拟头结点作为头节点的前一个节点从而将删除头节点的操作转化为删除第二个节点的操作避免了特判。
4. 方便插入操作
在链表中插入头节点时需要特殊处理。如果使用虚拟头结点我们可以将虚拟头结点作为头节点的前一个节点从而将插入头节点的操作转化为插入第二个节点的操作避免了特判。
综上所述设置虚拟头结点可以简化链表操作的实现同时可以避免特判和处理边界情况的麻烦。因此在链表操作中设置虚拟头结点是一个常见的技巧。