删除链表的倒数第N个节点(C语言)
删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
说明:给定的n保证是有效的。
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
分析:首先遍历链表中一共有多少个元素,然后查找倒数第n个元素,并把它删除。
下边是代码实现:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 9 10 struct ListNode* removeNthFromEnd(struct ListNode* head, int n){ 11 struct ListNode* list = head; 12 int i=0; 13 while(list!=NULL){ 14 i++; 15 list=list->next; 16 } 17 list = head; 18 if(n==i){ 19 head=head->next; 20 free(list); 21 return head; 22 } 23 int index=1; 24 while(index!=i-n){ 25 list=list->next; 26 index++; 27 } 28 struct ListNode *body = list->next; 29 list->next=list->next->next; 30 free(body); 31 return head; 32 }
posted on 2019-09-06 14:00 lucky&girl 阅读(1479) 评论(0) 编辑 收藏 举报