精华内容
下载资源
问答
  • 创建和遍历链表

    2017-02-18 17:20:23
    简单实用的创建和遍历链表代码
  • 遍历链表

    2021-02-18 15:42:56
    1.如果链表中的数据不连续,只需要把链表中的头节点拿出来(point=head,定义指针指向链表的头),利用指针,可以遍历整个链表。 2.代码实现 #include <stdio.h> struct Test { int data;//定义结构体的数据...

    1.如果链表中的数据不连续,只需要把链表中的头节点拿出来(point=head,定义指针指向链表的头),利用指针,可以遍历整个链表。

    2.代码实现

    #include <stdio.h>
    
    
    struct  Test
    {
             int  data;//定义结构体的数据
    	     struct Test  *next;//定义结构体的指针
    };
    
    void  printlink(struct Test *head)
    {  
    	struct  Test  *point;//对链表进行索引
    
    	point=head;//让point等于链表的头
    
          while(1)
          {
                if(point != NULL)
    	    {
    	               printf("%d ",point->data);
                       point=point->next;
                       //让指针往后走,让指针遍历整个链表
    	    }
    
    	    else
    	    {
    		      putchar('\n');
    	              break;
    	    }
    
          }   
    }
    
    int   main()
    {
    
    
           struct   Test  t1={1,NULL};
           struct   Test  t2={2,NULL};
           struct   Test  t3={3,NULL};
           struct   Test  t4={4,NULL};
    
           t1.next=&t2;/*t1的下一个存放下一个数据的地址*/
           t2.next=&t3; 
           t3.next=&t4;
    
          
           printlink(&t1);
    
           return  0;
    }
    

    运行结果

    在这里插入图片描述

    ——@上官可编程

    展开全文
  • java 数据结构 遍历链表程序 有研究或探讨的请加群:37424970 或联系本人MSN或邮箱:zhuseahui@yahoo.com.cn
  • 输出描述:可能有多组测试数据,对于每组数据,将n个整数建立升序链表,之后遍历链表并输出。输入例子:43 5 7 9输出例子:3 5 7 9AC code:#include#include#include#include#include#include#...

    题目描述

    建立一个升序链表并遍历输出。

    输入描述:

    输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。

    输出描述:

    可能有多组测试数据,对于每组数据,

    将n个整数建立升序链表,之后遍历链表并输出。

    输入例子:

    4

    3 5 7 9

    输出例子:

    3 5 7 9

    AC code:

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #define LL long long

    #define exp 1e-9

    #define MAXN 1000010

    using namespace std;

    typedef struct LNode{

    int data;

    LNode *next;

    }LNode;

    int main()

    {

    //freopen("D:\\in.txt","r",stdin);

    int i,n;

    while(scanf("%d",&n)!=EOF)

    {

    LNode *head,*p,*pre,*newNode;

    head = (LNode *)malloc(sizeof(LNode));

    head->next=NULL;

    for(i=1;i<=n;i++)

    {

    newNode = (LNode *)malloc(sizeof(newNode));

    scanf("%d",&newNode->data);

    p=head->next;

    pre=head;

    while(p)

    {

    if(p->data>newNode->data)

    {

    break;

    }

    else

    {

    pre=p;

    p=p->next;

    }

    }

    newNode->next=p;

    pre->next=newNode;

    }

    p=head->next;

    printf("%d",p->data);

    p=p->next;

    while(p)

    {

    printf(" %d",p->data);

    p=p->next;

    }

    puts("");

    }

    return 0;

    }

    展开全文
  • 链表、遍历链表

    千次阅读 2019-10-23 19:58:28
    遍历链表 # include # include # include typedef struct AA { int id ; char * name ; char * tel ; struct AA * pNext ; } Node ; int main ( ) { Node a = { 1 , ...
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct AA
    {
     int id;
     char* name;
     char* tel;
     struct AA *pNext;
    }Node;
    int main()
    {
     Node a={1,"佩奇","11",NULL};
     Node b={2,"苏西","22",NULL};
     Node c={3,"丹尼","33",NULL};
     Node d={4,"佩德罗","44",NULL};
     a.pNext = &b;
     b.pNext = &c;
     c.pNext = &d;
     return 0;
    }

    遍历链表

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    typedef struct AA
    {
     int id;
     char* name;
     char* tel;
     struct AA *pNext;
    }Node;
    int main()
    {
     Node a={1,"佩奇","11",NULL};
     Node b={2,"苏西","22",NULL};
     Node c={3,"丹尼","33",NULL};
     Node d={4,"佩德罗","44",NULL};
     Node* p=&a;
     a.pNext = &b;
     b.pNext = &c;
     c.pNext = &d;
     while(p != NULL)
     {
      printf("%d %s %s\n",p->id,p->name,p->tel);
      p=p->pNext;
     }
     return 0;
    }
    展开全文
  • 贴上代码, 我想问一下嵌套类ReverseArrayIterator中的next() 方法该怎样写,才能完成链表 ``` /** * 下压栈链表实现 * * @author maji * @date 2018-7-14 */ public class Stack<Item> implements ...
  • LeetCode刷题笔记 链表 遍历链表

    千次阅读 2021-11-09 11:09:17
    160 相交链表 给定两个链表,判断它们是否相交于一点,并求这个相交节点。 输入是两条链表,输出是一个节点。如无相交节点,则返回一个空节点。 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,...

    160 相交链表

    给定两个链表,判断它们是否相交于一点,并求这个相交节点。

    输入是两条链表,输出是一个节点。如无相交节点,则返回一个空节点。

    输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
    输出:Intersected at ‘8’
    解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。

    解析:

    ​ 假设链表 A 的头节点到相交点的距离是 a,链表 B 的头节点到相交点的距离是 b,相交点到链表终点的距离为 c。

    我们使用两个指针,分别指向两个链表的头节点,并以相同的速度前进,若到达链表结尾,则移动到另一条链表的头节点继续前进。按照这种前进方法,两个指针会在 a + b + c 次前进后同时到达相交节点。

    class Solution {
    public:
        ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
            ListNode *pa = headA, *pb = headB;
            while(pa != pb){
                pa = pa?pa->next:headB;
                pb = pb?pb->next:headA;
            }
            return pa;
        }
    };
    

    234 回文链表

    以 O(1) 的空间复杂度,判断链表是否回文。

    输入是一个链表,输出是一个布尔值,表示链表是否回文。

    输入:head = [1,2,2,1]
    输出:true
    

    解析:

    1. ​先使用快慢指针找到链表中点,再把链表切成两半

    2. 然后把后半段翻转,请参考206题反转链表

    3. 最后使用两个指针逐个比较两半元素是否相等

    class Solution {
    public:
        // 链表翻转
        ListNode* reverseList(ListNode* head) {
               ListNode *prev = nullptr, *next = head;
               while(head){
                   next = head->next;
                   head->next = prev;
                   prev = head;
                   head = next;
               }
               return prev;
           }
    
        bool isPalindrome(ListNode* head) {
            if(!head || !head->next){
                return true;
            }
            // 快慢指针找到链表中点
            ListNode *fast = head, *slow = head;
            while(fast->next && fast->next->next){
                fast = fast->next->next;
                slow = slow->next;
            }
            
            // 不管链表长度为偶数还是奇数 slow 指向都是前半部分的最后一个节点
            fast = slow->next;
            fast = reverseList(fast);
            slow = head;
            // 比较两部分元素是否一致
            while(fast){
                if(slow->val != fast->val){
                    return false;
                }
                slow = slow->next;
                fast = fast->next;
            }
            return true;
        }
    };
    

    19 删除链表的倒数第 N 个结点

    给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

    输入是一个链表,输出删除倒数第 n 个节点的链表

    输入:head = [1,2,3,4,5], n = 2
    输出:[1,2,3,5]

    解析:

    ​ 和使用快慢指针找到链表中点的思路一样,让快指针先于慢指针 n 个节点出发,那么当快指针到达链表尾部时,慢指针刚好处于链表倒数第 n+1 个节点,删除其next节点即可。

    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode *slow=head, *fast=head;
            // 快指针先走n步
            for(int i=0;i<n;++i){
                fast=fast->next;
            }
            if(!fast){
                head = head->next;
                return head;
            }
            while(fast->next){
                fast=fast->next;
                slow=slow->next;
            }
            ListNode *delNode = slow->next;
            slow->next = delNode->next;
            delete delNode;
            return head;
        }
    };
    

    参考资料

    LeetCode 101:和你一起轻松刷题(C++) 第 13 章 指针三剑客之链表

    展开全文
  • 倒序遍历链表

    千次阅读 2017-04-16 20:46:25
    //将值遍历,存放在数组中, 然后倒序输出 Node* r; r = L->next; int arr[maxSize]; int i = 0; while(r!=NULL) { arr[i++] = r->data; r = r->next; } i--;//回到数组末尾 while(i>=0){ printf...
  • #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Node { int id;//数据域 struct Node* next;...//链表的头结点地址右函数值返回 Node* SListCreat() { Node...
  • 遍历链表+链表的参数

    2018-11-12 21:14:27
    一、遍历链表 在操作链表的函数中将频繁使用遍历链表这种编程模式,比如:计算链表节点个数 for(cursor = head_ptr; cursor != NULL; cursor =cursor-&gt;link()) { //在循环体中,可以执行操作链表中节点所...
  • 巧妙利用两个指针遍历链表——链表中倒数第k个结点
  • 遍历链表,删除元素结点,注意别断链。复杂度O(N)。 public void remove(Item item) { while (first != null && item.equals(first.item)) { first = first.next; ...
  • 遍历链表确定链表中的最大值

    千次阅读 2018-10-19 14:44:49
    Position Find( List L, ElementType X ){ for(int i=0;i&lt;L-&gt;Last;i++) if(L-&gt;Data[i]==X) return i; return ERROR; }  
  • 反向遍历链表

    2020-02-23 11:59:18
    反向遍历链表,不改变链表结构。 利用栈的先进后出。 public static void reversePrint(HreoNode node){ if(node.next==null){ return; } //创建栈 Stack<HreoNode> stack = new Stack<HreoNode>...
  • C语言两种非递归方式实现中序遍历链表二叉树 二叉树采用二叉链表存储结构,按照先序遍历的方式创建下面这棵二叉树。然后分别用中序遍历的两种非递归算法遍历这棵二叉树。最后释放二叉树的每个结点的存储空间。提示:...
  • 链表--逆序遍历链表

    2020-08-26 10:44:44
    逆序遍历链表 模式识别:如果对靠前节点的处理必须在靠后节点之后,即倒序访问问题,则用recursion(递归),或者等效地,stack来解决。 例题:逆序遍历链表 void traverse(ListNode *head) { if(head == NULL) ...
  • 题目:从键盘读入n个复数(实部和虚部都为整数)用链表存储,遍历链表求出n个复数的和并输出。 输入 3 3 4 5 2 1 3 输出: 9+9i C #include<stdio.h> typedef struct linklist { int a, b; struct ...
  • cpp代码-//从尾到头打印链表 //遍历链表的同时将节点值入栈,最后依次出栈
  • LinkedList或ArrayList泛型类遍历链表

    千次阅读 2017-05-09 13:38:16
     System.out.println("迭代器方法遍历输出:");    Iterator<String> iter=mylist.iterator();    while(iter.hasNext()){     String te=iter.next();     System.out.print(te);    ...
  • Java 遍历链表

    2019-09-16 23:57:18
    class Node { String data = null; //链表存储的数据 Node next = null; //下一个节点 public Node (String data) { this.data = data; ...
  • 低级错误之遍历链表时删除节点

    千次阅读 2015-02-10 22:40:09
    其中具体的问题是出在了[遍历链表时删除节点],我使用的是list_for_each,结果老是有异灵事件,明明就一个节点,但是就是会有遍历出第二个,且第二个还是非法的,导致在使用的过程中出现段错误.最后才明白,如果在要遍历的...
  • 数据结构 初始化链表,插入删除节点,遍历链表,链表长度,找出中间节点

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 369,609
精华内容 147,843
关键字:

怎么遍历链表