您的位置:首页 > 移动开发 > 微信开发

小程序:删除单链表中倒数第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;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: