删除链表的倒数第N个节点
/* 最长回文字串。 */ #include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<string.h> #include <iostream> typedef struct ListNode{ int val; struct ListNode *next; }; void print(struct ListNode *L){ struct ListNode *p=L->next; while(p){ printf("%d ",p->val); p=p->next; } printf("\n"); } void create(struct ListNode *&L,int a[],int n){ struct ListNode *r,*s; L=(struct ListNode*)malloc(sizeof(struct ListNode)); r=L; int i; for(i=0;i<n;i++){ s=(struct ListNode*)malloc(sizeof(struct ListNode)); s->val=a[i]; r->next=s; r=s; } r->next=NULL; } struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ struct ListNode* p,*q; p=q=head; if(!head||!head->next) return NULL; while(n){ q=q->next; n--; } if(!q) return p->next; q=q->next; while(q){ p=p->next; q=q->next; } p->next=p->next->next; return head; } int main() { int n=2,a[n]={1,2}; struct ListNode *L; create(L,a,n); print(L); removeNthFromEnd(L,2); print(L); return 0; }