19. Remove Nth Node From End of List
2016-08-23 19:22
441 查看
C语言解法:先遍历一遍计算链表元素个数length,如果小于等于n则直接返回,大于n则删除第length-n元素的后一个元素并返回head。
#include<stdio.h> #include<stdlib.h> 4000 struct ListNode { int val; struct ListNode *next; }; struct ListNode* removeNthFromEnd(struct ListNode* head, int n) { struct ListNode *p,*q; int num,length; p=head; length=0; while(p) { length++; p=p->next; } if(length<n) return head; if(length==n) return head->next; num=1; p=head; while(p) { if((length-n)==num) { q=malloc(sizeof(struct ListNode)); q=p->next; p->next=q->next; free(q); break; } p=p->next; num++; } return head; } int main() { struct ListNode* L,*p,*q; int N,M,i,number; L=malloc(sizeof(struct ListNode)); scanf("%d",&number); scanf("%d",&N); L=NULL; p=L; for(i=0;i<N;i++) { scanf("%d",&M); q=malloc(sizeof(struct ListNode)); q->val=M; q->next=NULL; if(NULL==L) L=q; else p->next=q; p=q; } L=removeNthFromEnd(L,number); while(L) { printf("%d ",L->val); L=L->next; } }
C++解法思想:用两个指针p,q,指针之间间隔为n,p为删除节点的前驱,当q指向链表最后时,删除 p->next就可以了
#include<iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *p,*q; int i; p=head; q=head; for(i=0;i<n;i++)//向右移n个,直接找从尾部开始数第n个数的前驱 { if(q) q=q->next; else return head; } if(q==NULL) return head->next; while(q->next) { q=q->next; p=p->next; } p->next=p->next->next; return head; } }; void main() { ListNode *L,*p,*q,*list; int N,M,i,number; Solution solve; L= (ListNode*)malloc(sizeof(ListNode)); cin>>number; cin>>N; L=NULL; p=L; for(i=0;i<N;i++) { cin>>M; q= (ListNode*)malloc(sizeof(ListNode)); q->val=M; q->next=NULL; if(NULL==L) L=q; else p->next=q; p=q; } list=solve.removeNthFromEnd(L,number); while(list) { cout<<list->val<<' '; list=list->next; } }
相关文章推荐
- 19.Remove Nth Node From End of List
- LeetCode 19. Remove Nth Node From End of List 对撞指针
- [leetcode]19. Remove Nth Node From End of List@Java解题报告
- Leetcode#19 Remove Nth Node From End of List
- leetcode--19. Remove Nth Node From End of List
- LeetCode 第 19 题 (Remove Nth Node From End of List)
- leetcode 之Remove Nth Node From End of List(19)
- LeetCode19 - remove nth node from end of list
- leetCode 19.Remove Nth Node From End of List(删除倒数第n个节点) 解题思路和方法
- leetcode——19——Remove Nth Node From End of List
- 88/19 Merge Sorted Array/Remove Nth Node From End of List(指针运算)
- [LeetCode] 19. Remove Nth Node From End of List
- [leetcode] 19.Remove Nth Node From End of List
- leetcode-Remove Nth Node From End of List-19
- LeetCode---(19)Remove Nth Node From End of List
- LeetCode 19 Remove Nth Node From End of List
- LeetCode 19. Remove Nth Node From End of List
- leetcode刷题(19. Remove Nth Node From End of List)
- [LeetCode]19. Remove Nth Node From End of List
- LeetCode 19: Remove Nth Node From End of List