小程序:删除单链表中倒数第n个结点
2016-04-12 22:24
513 查看
<pre name="code" class="cpp">#include<iostream> #include<string> #include <stdio.h> #include<vector> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode* removeNthFromEnd(ListNode* head, int n) { if(head==NULL)return head; ListNode *CurrNode=head;//遍历链表,CurrNode指向当前结点,DeleteNode指向 从CurrNode往前数n个结点 int count=0; while(CurrNode!=NULL&&count!=n){ CurrNode=CurrNode->next; count++; } if(count==n&&CurrNode==NULL)head=head->next;//链表共有n个结点,删除头结点 else if(count==n&&CurrNode!=NULL){//CurrNode结点和DeletNode结点同步向下一个结点移动,两者之间相隔n个结点。当CurrNode结点走到终点时,利用DeleteNode删除需要删除的结点 ListNode *DeleteNode=head; while(CurrNode->next!=NULL){ CurrNode=CurrNode->next; DeleteNode=DeleteNode->next; } DeleteNode->next=DeleteNode->next->next;//删除结点 } return head; } void print(ListNode* Head) { while(Head!=nullptr) { printf("%d->",Head->val); Head=Head->next; } puts(""); } int main(){ const int N=5; int a ={1,3,5,7,9}; ListNode *head=nullptr; ListNode *pre=nullptr; for(int i=0;i<N;i++) { if(i==0) { head=new ListNode(a[i]); pre=head; } else { ListNode *cur=new ListNode(a[i]); pre->next=cur; pre=cur; } } print(head); cout<<"删除单链表倒数第5个元素后:"<<endl; head=removeNthFromEnd(head,5); print(head); return 0; }
运行结果:
相关文章推荐
- 微信分红包
- 微信退款和支付宝退款接口调用(java版)
- 微信退款和支付宝退款接口调用(java版)
- zabbix使用微信告警
- 快速集成微信心得,返回-1
- iOS-集成支付宝支付、微信支付简单总结
- 微信公众号天气查询接口实例
- iOS - 微信支付详解
- Android开发中实现发送短信的小程序示例
- 对于微信内置浏览器中不能小窗播放视频原因的分析以及解决
- Android仿微信界面--使用Fragment实现(慕课网笔记)
- 微博MySQL优化之路--dockone微信群分享
- 微博MySQL优化之路--dockone微信群分享
- 微信支付,少1分钱bug
- iOS ShareSDK实现分享——微信分享
- 造谣公号向阿里“求饶”,饶还是不饶?
- 微信自定义分享的签名版实现
- 微信公众号申请+新浪SAE申请
- C#开发微信门户及应用(31)--微信语义理解接口的实现和处理
- 微信公众号接口配置