LeetCode 19. Remove Nth Node From End of List
2016-03-10 01:18
465 查看
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Note:
Given n will always be valid.
Try to do this in one pass.
一、算法分析
(1)单链表同样不带头结点;(2)如果删除的是头结点,注意这种情况单独讨论;(3)算法思想就是设置两个指针,第一个指针走n步时,第二个指针才刚刚开始走。这样第一个指针到达终点时,第二个指针恰好在倒第N个;删除指针还是用了pre,其实可以p->val=p->next->val;但是这里还是有p->next是否为NULL的问题,要记得判断,我就采用pre直接删除了。
二、C语言实现
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
一、算法分析
(1)单链表同样不带头结点;(2)如果删除的是头结点,注意这种情况单独讨论;(3)算法思想就是设置两个指针,第一个指针走n步时,第二个指针才刚刚开始走。这样第一个指针到达终点时,第二个指针恰好在倒第N个;删除指针还是用了pre,其实可以p->val=p->next->val;但是这里还是有p->next是否为NULL的问题,要记得判断,我就采用pre直接删除了。
二、C语言实现
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeNthFromEnd(struct ListNode* head, int n) { struct ListNode *p,*q,*pre; p=head; while(n--){ p=p->next; } if(p==NULL){//表示要删除第一个结点 return head->next; } pre=head; q=head->next; while(p->next!=NULL){ p=p->next; pre=q; q=q->next; } pre->next=q->next; return head; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#定义并实现单链表实例解析
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题