内蒙古城乡建设厅网站资质公告,丹东东港,百度竞价排名医院事件,开发商城系统app描述: 给你单链表的头节点 head #xff0c;请你反转链表#xff0c;并返回反转后的链表 示例: 方法一: 让链表指向反向
如图所示: 代码思路:
struct ListNode* reverseList(struct ListNode* head) {struct ListNode* n1NULL;struct ListNode* n2head;struct ListNode*…描述: 给你单链表的头节点 head 请你反转链表并返回反转后的链表 示例: 方法一: 让链表指向反向
如图所示: 代码思路:
struct ListNode* reverseList(struct ListNode* head) {struct ListNode* n1NULL;struct ListNode* n2head;struct ListNode* n3head-next;while(n2){//n2指向n1n2-nextn1;//三个指针向后移动n1n2;n2n3;n3n3-next;}return n1;
} 这里要注意,上述代码是我们通过画图写出来的大概思路,这里还有特殊情况需要处理一下, 比如: struct ListNode* n3head-next; n3n3-next; 开始并没有判断head和n3指针是否为空,直接引用next可能会导致错误 正确代码: struct ListNode* reverseList(struct ListNode* head) {//空链表反转后还是空链表if(headNULL){return NULL;}struct ListNode* n1NULL;struct ListNode* n2head;struct ListNode* n3head-next;while(n2){n2-nextn1;n1n2;n2n3;//如果n3指向空的话就说明走到链表末尾了,没必要在往后走了if(n3)n3n3-next;}return n1;
}
方法二: 头插法
从开始依次取出结点,按头插法插入,就可以实现链表反转
代码: struct ListNode* reverseList(struct ListNode* head) {if(headNULL){return NULL;}struct ListNode* curhead;struct ListNode* newNodeNULL;while(cur){struct ListNode*retcur-next;cur-nextnewNode;newNodecur;curret;}return newNode;}