标签:
本题比较简单,主要考察了单链表的创建与删除。
但是有一个问题需要着重的考虑,如何快速定位链表的倒数第n个节点。这就需要两个辅助节点,一个节点先走到正数第n个位置,然后两个辅助节点一块往后走,最后后面的节点的位置就是我们需要的倒数第n个节点。
#include<stdio.h> #include<stdlib.h> struct ListNode//定义节点 { int value; struct ListNode *next; }; ListNode *removeNthFromEnd(ListNode *head,int n) { ListNode *p=head;//前面开始走的节点 ListNode *q=head;//后面跟着走的节点 while(p!=NULL) { p=p->next; if(n--<0) q=q->next;//让q节点走到可以删除的位置 } if(n==0)//表示就从开头开始删除 head=head->next; else//正常的位置删除节点 q->next=q->next->next; return head; } int main() { int n,m; while(scanf("%d",&m)!=EOF) { ListNode *head=(ListNode*)malloc(sizeof(ListNode)); head->next=NULL; head->value=0; ListNode *p=head; for(int i=0;i<m;i++) { int tmp_value; ListNode *tmp_node=(ListNode*)malloc(sizeof(ListNode)); scanf("%d",&tmp_value); tmp_node->value=tmp_value; tmp_node->next=NULL; p->next=tmp_node; p=tmp_node; } scanf("%d",&n); ListNode*h=removeNthFromEnd(head,n); while(h->next) { h=h->next; printf("%d ",h->value); } } return 0; }
leetcode第19题-Remove Nth Node From End of List
标签:
原文地址:http://blog.csdn.net/zyh920521/article/details/45014091