day05删除一个无头单链表的非尾节点 +从尾到头打印单链表+复杂链表的复制
2017-07-17 23:39
555 查看
1.删除一个无头单链表的非尾节点,时间复杂度为O(1)
从尾到头打印单链表
复杂链表的复制
一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。
struct ListNode { int val; ListNode *next; ListNode(int x):val(x),next(NULL) { } }; //节点的后一个节点赋值给要删除的节点,再删除这个后面的节点。 int DelNotTail(ListNode *delnode) { if(delnode == NULL) return -1; ListNode *pnext = delnode->next; delnode->val = pnext->val; delnode->next = pnext->next; delete pnext; return 0;
从尾到头打印单链表
struct ListNode { int val; ListNode *next; ListNode(int x):val(x),next(NULL) { } }; void Print(ListNode *phead) { if(phead == NULL) return ; Print(phead->next); cout << phead->val <<endl; }
复杂链表的复制
一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。
struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { } }; RandomListNode* Clone(RandomListNode* pHead) { if(pHead == NULL) return NULL; //第一步:每一个节点的后面插入一个新的节点 RandomListNode *pcur = pHead; while(pcur) { RandomListNode *pm = new RandomListNode(pcur->label); pm->next = pcur->next; pcur->next = pm; pcur = pm->next; } //第二步:为每一个新节点的随机指针赋值 pcur = pHead; while(pcur) { RandomListNode *pnext = pcur->next; //指向新的节点 if(pcur->random == NULL) pnext->random = NULL; else pnext->random = pcur->random->next; pcur = pnext->next; } //第三步:将新的链表拆下来 RandomListNode *ph = pHead->next; RandomListNode *pold = pHead; RandomListNode *pnew = ph; while(pnew) { pold->next = pnew->next; pold = pnew->next; //当pnew指向最后一个节点时,此时pold指向空了, pnew->next = (pold == NULL? NULL:pold->next); pnew = (pold == NULL? NULL:pold->next); } return ph; }
相关文章推荐
- 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表
- 【链表】删除一个无头单链表的非尾节点 以及从尾到头打印单链表
- 判断链表相交,删除无头单链表的非尾节点及倒序打印单链表——题集(四)
- 笔试/面试:删除一个无头单链表的非尾节点 ,从尾到头打印单链表
- C语言:【单链表】删除一个无头单链表的非尾节点
- 链表--删除一个无头单链表的非尾节点
- 删除一个无头单链表的非尾节点+从尾到头打印单链表
- 每日一题——删除无头链表的非尾节点、逆向打印单链表
- C语言:【单链表】删除一个无头单链表的非尾节点
- 17_7_17:删除一个无头单链表的非尾节点。从尾到头打印单链表
- 1.删除一个无头单链表的非尾节点 2.从尾到头打印单链表
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- 删除一个无头单链表的非尾节点
- 链表面试题逆序打印,删除无头非尾节点,非头位置插入,约瑟夫环,查找中间和倒数第k个节点
- 删除一个无头单链表的非尾节点
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点
- 删除一个无头单链表的非尾节点【每日一题】
- 删除一个无头单链表的非尾节点(C语言)
- <笔试><面试>单链表相关(1)从尾到头打印链表、删除一个无头链表的非尾结点