
链表
tianmo2010
这个作者很懒,什么都没留下…
展开
-
LinkList的新建,插入,删除等的实现
#include "stdio.h"#include "malloc.h"struct student{ long num; float score; struct student *next;};int n;struct student原创 2011-08-18 19:50:01 · 1215 阅读 · 0 评论 -
单链表的排序
利用二路归并排序/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ...原创 2012-03-25 21:01:50 · 1681 阅读 · 0 评论 -
编程实现合并两个有序单链表
编程实现合并两个有序(假定为降序)单链表的函数,输入为两个有序链表的头结点,函数返回合并后新的链表的头节点,要求:不能另外开辟新的内存存放合并的链表。合并函数声明如下:node *merge_sorted_list( node * head1, node *head2);//重要方法:node merge_sorted_list(const node head1,const n原创 2012-02-29 20:11:28 · 4157 阅读 · 0 评论 -
单链表是否有环并如何找到环入口
1、如何判断一个链表是不是有环? 2、如果链表为存在环,如果找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:bool IsExit原创 2011-09-20 18:02:17 · 1731 阅读 · 0 评论 -
寻找链表中间节点—一种高效的算法
链表(特别是单链表)的定位是链表这种数据结构的一个软肋所在,定位某一个元素你就不得不通过遍历的方式获得。如果要寻找一个单链表的中间节点,普通的方法就是先遍历得到链表的长度,然后再通过长度遍历得到链表的中间节点。当然有一些链表通过一个特殊的头节点记录链表的长度的情况,可能要简单一些。 前一段时间,在看链表的归并排序的时候,就不得不面临着寻找链表中间节点的问题。这里给出一种实现,很可能是大原创 2011-10-02 15:26:36 · 2535 阅读 · 2 评论 -
从尾到头输出链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;}; 分析:这是一道很有意思的面试题。该题以及它的变体经常出现在各大公司的面试、笔试题中。看到这道题后,第一反应是从头到尾输出比较简单。于是很自然地想到把链表中转载 2011-08-19 19:54:28 · 993 阅读 · 0 评论 -
找出两个链表的第一个公共结点
题目:两个单向链表,找出它们的第一个公共结点。链表的结点定义为:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:这是一道微软的面试题。微软非常喜欢与链表相关的题目,因此在微软的面试题中,链表出现的概率相当高。如果两个单向链表有公共的结点,也就是说两个链表从某一结点开始转载 2011-08-19 19:40:17 · 972 阅读 · 0 评论 -
约瑟夫环的实现-链表方法
//最终实现方法-链表#include #include struct node{ int nNum,nPassword; struct node * next;};typedef struct node * LNode;LNode CreateList(const int num,const int nPwd){ int i; LNode head = NULL,原创 2012-02-20 19:59:52 · 1103 阅读 · 0 评论 -
常见的链表题目
一些常见的单链表题目,总结思路和实现代码。1.单链表的反序2.给单链表建环3.检测单链表是否有环4.给单链表解环5.检测两条链表是否相交6.不输入头节点,删除单链表的指定节点(只给定待删除节点指针) 1.单链表的反序//逆转链表,并返回逆转后的头节点 node* reverse(node *head) { if(head == NULL ||转载 2011-09-21 13:36:59 · 1084 阅读 · 1 评论 -
在O(1)时间删除链表结点
题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted); 分转载 2011-08-19 19:52:33 · 679 阅读 · 0 评论 -
查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;};分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因转载 2011-09-16 18:10:34 · 1021 阅读 · 1 评论 -
参加笔试的总结
1 #define struct s * tPS 和 typedef struct s * tPS 哪个好,为什么?1)关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。Define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。2)Typedef用来定义类型的别名,这些类型不只包含内部类型(i原创 2011-09-25 08:28:08 · 1076 阅读 · 0 评论 -
链表的复制
实现代码:#include "stdio.h"#include "malloc.h"struct ListNode{ int value; int col; struct ListNode *next;};ListNode * CopyRow原创 2011-08-17 14:25:11 · 849 阅读 · 0 评论 -
单链表的反转
typedef struct LinkNode { int data; struct LinkNode* next; }LinkNode, *LinkList; LinkList ReverseList(LinkList head) { if (head == NULL || head->next == NULL) { return head; ...原创 2011-09-23 19:58:01 · 846 阅读 · 0 评论