zoukankan      html  css  js  c++  java
  • 单向链表学习

    今天做的一道关于单向链表的简单的题目。

    将一个链表的倒数第pos个成员打印出来。思路很简单,首先创建一个简单的单向链表,插入相应的元素,利用2个指针head1和head2,先让head1先走pos-1个位置后,在让两个指针同时走,当head1走到最后一个节点时,此时的head2即为倒数第pos个成员的指针。

    单向链表:每个结点的存储地址放在直接前驱的指针域中,每个结点只有一个指向后继的指针。访问数据元素只能由链表头一次到链表尾,而不能逆向访问。

    单向链表又分为带头节点和不带头节点2种类型。

    带头节点的链表有效解决了“第一个结点”问题,因为链表中第一个结点是没有直接前驱的,而且它的地址是整个链表的地址,需要放在链表的头指针变量中;而其它结点都有直接前驱,其地址存放在直接前驱节点的指针域中。

    链表的插入:单向链表结点的插入是利用修改结点指针域的值,使其指向新的链接位置来实现的,不需要移动任何元素。

    链表的删除:要删除第i个结点,首先在单向链表中找到删除结点的前一个结点,并且用指针q指向它,指针p指向要删除的结点,将*q的指针域修改为待删除结点*p的后继结点地址,删除后的结点动态地释放。

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 
     5 typedef int datatype;
     6 typedef struct node 
     7 {
     8     struct node *next;
     9     datatype data;
    10 }linknode,*linklist;
    11 
    12 linklist CreateEmptyLinklist()
    13 {
    14     linklist h;
    15     h = (linklist)malloc(sizeof(linknode));
    16     h->next = NULL;
    17     return h;
    18 }
    19 int lengthLinklist(linklist h)
    20 {
    21     int length = 0;
    22     h = h->next;
    23     while (h != NULL)
    24     {
    25         length++;
    26         h = h->next;
    27     }
    28     return length;
    29 }
    30 int insertLinklist(linklist h,int x,int pos)
    31 {
    32     linklist p;
    33     //p = h->next;
    34     if ((pos < 0) || (pos > lengthLinklist(h)))
    35         return -1;
    36     while (pos--)
    37     {
    38         h = h->next;
    39     }
    40     p = (linklist)malloc(sizeof(linknode));
    41     p->data = x;
    42     p->next = h->next;
    43     h->next = p;
    44     return 0;
    45 }
    46 void visitLinklist(linklist h)
    47 {
    48     linklist p;
    49     p = h->next;
    50     printf("the linklist is :");
    51     while (p != NULL)
    52     {
    53         printf("%d ",p->data);
    54         p = p->next;
    55     }
    56     printf("\n");
    57 }
    58 
    59 int seekNumber(linklist h,int pos)
    60 {
    61     linklist head1,head2;
    62     head1 = h;
    63     head2 = h;
    64     pos = pos - 1;
    65     while (pos)
    66     {
    67         pos--;
    68         if (NULL != h->next)
    69         {
    70             head1 = h->next;
    71         }
    72         else
    73         {
    74             printf("pos is notcorrespond! ");
    75             return -1;
    76         }
    77     }
    78     while (head1->next != NULL)
    79     {
    80         head1 = head1->next;
    81         head2 = head2->next;
    82     }
    83     return head2->data;
    84 }
    85 int main(int argc, char *argv[])
    86 {
    87     linklist h;
    88     h = CreateEmptyLinklist();
    89     int i = 0;
    90     for (; i < 10; i++)
    91     {
    92         insertLinklist(h,i+97,i);
    93     }
    94     visitLinklist(h);
    95 
    96     printf("\n%d \n",seekNumber(h,2));
    97     return 0;
    98 }
  • 相关阅读:
    SSH出错---The method getRealPath(String) from the type ServletRequest is deprecated request.getRealPath("")
    Struts2学习9--文件下载
    Struts2学习9--中文文件下载的问题
    Struts2学习8--文件上传(多个文件上传)
    把字符串数据存到字典当中
    新建可变数组,来接收原来不可变的数组NSArry
    oc将字典中内容添加到数组中
    输出字典中的key和 value
    NSArray基础数组的排序
    在oc中把原本字符串123-456-789-000里面的-去掉然后输出最简单方法
  • 原文地址:https://www.cnblogs.com/zhou2011/p/2663454.html
Copyright © 2011-2022 走看看