13\给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,
来源:互联网 发布:unity3d游戏开发案例 编辑:程序博客网 时间:2024/05/12 15:57
<pre name="code" class="cpp">#include "List.h"#include <stdio.h>#include <stdlib.h>ListNode* CreateListNode(int value){ListNode* pNode = new ListNode();pNode->m_nValue = value;pNode->m_pNext = NULL;return pNode;}void ConnectListNodes(ListNode* pCurrent, ListNode* pNext){if(pCurrent == NULL){ printf("Error to connect two nodes.\n"); exit(1); // exit(0)表示正常退出 // exit(1)表示异常退出.这个1是返回给操作系统的。}pCurrent->m_pNext = pNext;}void PrintListNode(ListNode* pNode){if(pNode == NULL) { printf("The node is NULL\n"); } else { printf("The key in node is %d.\n", pNode->m_nValue); }}void PrintList(ListNode* pHead){printf("PrintList starts.\n");ListNode* pNode = pHead;while(pNode != NULL){printf("%d\t", pNode->m_nValue);pNode = pNode->m_pNext;}printf("\n PrintList ends.\n");}void DestroyList(ListNode* pHead){ListNode *pNode = pHead;while(pNode != NULL){pHead = pHead->m_pNext;delete pNode;pNode = pHead;}}
<pre name="code" class="cpp">/* main Definition Created by taotao man on 2015-11-10 brief: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,链表结点与函数的定义如下:struct ListNode{int m_nValue;ListNode *m_pNext;};void DeleteNode(ListNode **pListHead, ListNode * pToBeDeleted); date: 2015-11-10 // 修改记录: add SetA(); Change GetA();*/#include "stdafx.h"#include "List.h"void DeleteNode(ListNode **pListHead, ListNode * pToBeDeleted){if(!pListHead || !pToBeDeleted) return;// 要删除的结点不是尾结点if(pToBeDeleted->m_pNext != NULL){ListNode *pNext = pToBeDeleted->m_pNext;pToBeDeleted->m_nValue = pNext->m_nValue;pToBeDeleted->m_pNext = pNext->m_pNext;delete pNext;pNext = NULL;} // 链表只有一个结点,删除头结点(也是尾结点)else if(*pListHead == pToBeDeleted){delete pToBeDeleted;pToBeDeleted = NULL;*pListHead = NULL;}// 链表中有多个结点,删除尾结点else{ListNode *pNode = *pListHead;while(pNode->m_pNext != pToBeDeleted){pNode = pNode->m_pNext;}pNode->m_pNext = NULL;delete pToBeDeleted;pToBeDeleted = NULL;}}// ====================测试代码====================void Test(ListNode* pListHead, ListNode* pNode){ printf("The original list is: \n"); PrintList(pListHead); printf("The node to be deleted is: \n"); PrintListNode(pNode); DeleteNode(&pListHead, pNode); printf("The result list is: \n"); PrintList(pListHead);}// 链表中有多个结点,删除中间的结点void Test1(){ListNode* pNode1 = CreateListNode(1);ListNode* pNode2 = CreateListNode(2);ListNode* pNode3 = CreateListNode(3);ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5);ConnectListNodes(pNode1, pNode2);ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5);Test(pNode1, pNode3);DestroyList(pNode1);}// 链表中有多个结点,删除尾结点void Test2(){ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5);ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5);Test(pNode1, pNode5);DestroyList(pNode1);}// 链表中有多个结点,删除头结点void Test3(){ListNode* pNode1 = CreateListNode(1); ListNode* pNode2 = CreateListNode(2); ListNode* pNode3 = CreateListNode(3); ListNode* pNode4 = CreateListNode(4); ListNode* pNode5 = CreateListNode(5);ConnectListNodes(pNode1, pNode2); ConnectListNodes(pNode2, pNode3); ConnectListNodes(pNode3, pNode4); ConnectListNodes(pNode4, pNode5);Test(pNode1, pNode1);DestroyList(pNode1);}// 链表中只有一个结点,删除头结点void Test4(){ListNode* pNode1 = CreateListNode(1); Test(pNode1, pNode1);}// 链表为空void Test5(){ Test(NULL, NULL);}int _tmain(int argv, _TCHAR* argc){// Test1();// Test2(); // Test3();// Test4();Test5();return 0;}
0 0
- 13\给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点
- 给定单链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该节点
- 给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- O(1)时间删除单向循环链表给定结点
- 有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
- 面试题13 在o(1)时间删除链表的给定结点
- LinkLists 删除链表中的一个给定指针的结点 @CareerCup
- 8、一个单链表,不给头指针,只给出当前结点,删除该结点。
- 在一个无头指针的单链表中,删除指针p所指向的结点
- 给定链表中间某结点指针,删除链表中该结点
- 给定链表中间某结点指针,删除链表中该结点
- mysql水平分表和垂直分表的优缺点
- Kafka---如何配置Kafka集群和zookeeper集群
- 分享:基于神经网络的Visual C++阿拉伯数字训练和识别程序
- Service类onStartCommand()的三个返回值
- 大型互联网系统设计综述
- 13\给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点,
- 真机调试问题:Unable to find a team with the given Team ID
- JAVA基础之OO简介
- 微信支付paysignkey设置问题
- iso中输入框被软键盘覆盖的解决方案
- java Socket用法详解
- JS版获取最长公共子串的方法
- Machine Learning week 7 quiz: Support Vector Machines
- 打patch的方法