C语言数据结构实现链表逆序并输出

时间:2025-12-03 15:51:18 C语言

C语言数据结构实现链表逆序并输出

  将一个链表逆序并输出。可以用两种方法来实现,第一种是借助了一个新的空链表;第二种是在原来链表的基础上直接实现逆序。下面百分网小编带大家一起来看看详细内容,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网!

  实例代码:

  头文件:

  #include <stdio.h>

  #include <stdlib.h>

  #include <malloc.h>

  typedef int ElemType;

  typedef struct Node

  {/pic/p>

  ElemType value;    /pic/p>

  struct Node *next;/pic/p>

  }Node,*ptr_Node;

  typedef struct LinkList

  {/pic/p>

  ptr_Node head; /pic/p>

  ptr_Node tail;/pic/p>

  int length;  /pic/p>

  }LinkList,*ptr_LinkList;

  ptr_LinkList CreateList(void)

  {/pic/p>

  ptr_LinkList linklist;

  linklist=(LinkList *)malloc(sizeof(LinkList));

  if(!linklist)

  {

  printf("allocation failed.\n");

  }

  linklist->head=NULL;

  linklist->tail=NULL;

  linklist->length=0;

  return linklist;

  }

  bool IsListEmpty(ptr_LinkList linklist)

  {/pic/p>

  if(linklist->length==0)

  {

  return true;

  }

  return false;

  }

  void InsertListHead(ptr_LinkList linklist,ElemType element)

  {/pic/p>

  ptr_Node ptr_node;

  ptr_node=(Node *)malloc(sizeof(Node)); /pic/p>

  if(!ptr_node)

  {

  printf("allocation failed.\n");

  }

  else

  {

  ptr_node->value=element;

  if(linklist->length==0)

  {

  linklist->head=ptr_node;

  linklist->tail=linklist->head;

  linklist->tail->next=NULL;

  }

  else

  {

  ptr_node->next=linklist->head;

  linklist->head=ptr_node; /pic/p>

  }

  linklist->length++; /pic/p>

  }

  }

  void InsertListTail(ptr_LinkList linklist,ElemType element)

  {

  ptr_Node ptr_node;

  ptr_node=(Node *)malloc(sizeof(Node)); /pic/p>

  if(!ptr_node)

  {

  printf("allocation failed.\n");

  }

  else

  {

  ptr_node->value=element;

  if(linklist->length==0)

  {

  linklist->head=ptr_node;

  linklist->tail=linklist->head;

  linklist->tail->next=NULL;

  }

  else

  {

  linklist->tail->next=ptr_node;

  linklist->tail=ptr_node; /pic/p>

  }

  linklist->length++; /pic/p>

  }

  }

  void InsertListPosition(ptr_LinkList linklist,int pos,ElemType element)

  {

  int i;

  ptr_Node ptr_node;

  ptr_Node temp_ptr_node;

  if(pos<1 || pos>linklist->length)

  {

  printf("The insert position is invalidate.\n");

  }

  else

  {

  ptr_node=(Node *)malloc(sizeof(Node)); /pic/p>

  if(!ptr_node)

  {

  printf("allocation failed.\n");

  }

  ptr_node->value=element;

  if(pos==1)

  {

  InsertListHead(linklist,element);

  }

  else if(pos==linklist->length)

  {

  InsertListTail(linklist,element);

  }

  else

  {

  temp_ptr_node=linklist->head;

  for(i=1;i<pos-1;i++)

  {/pic/p>

  temp_ptr_node=temp_ptr_node->next;

  }

  ptr_node->next=temp_ptr_node->next;

  temp_ptr_node->next=ptr_node;

  linklist->length++;

  }

  }

  }

  void Destroy(ptr_LinkList linklist)

  {/pic/p>

  ptr_Node p=linklist->head;

  ptr_Node q;

  while(p)

  {/pic/p>

  q=p->next;

  free(p);

  p=NULL;

  p=q;

  }

  }

  void Traverse(ptr_LinkList linklist)

  {/pic/p>

  ptr_Node p;

  p=linklist->head;

  while(p)

  {

  printf("%4d",p->value);

  p=p->next;

  }

  }

  头文件中实现了链表的几个基本的操作,有的是必须的,有些是非必须的。

  实现代码:

  #include "stdafx.h"

  #include "LinkList.h"

  #include <conio.h>

  ptr_LinkList InvertList(ptr_LinkList list)

  {/pic/p>

  ptr_LinkList inverted_linklist;

  ptr_Node p;

  p=list->head;

  inverted_linklist=CreateList();/pic/p>

  while(p)

  {/pic/p>

  InsertListHead(inverted_linklist,p->value);

  p=p->next;

  }

  return inverted_linklist;

  }

  void InvertLinkList(ptr_LinkList linklist)

  {/pic/p>

  ptr_Node p,q,r,m;

  m=p=linklist->head;

  q=p->next;

  r=q->next;

  while(r)

  {/pic/p>

  q->next=p;

  p=q;

  q=r;

  r=r->next;

  }

  q->next=p; /pic/p>

  linklist->head=q;

  linklist->tail=m;

  linklist->tail->next=NULL;

  }

  int _tmain(int argc, _TCHAR* argv[])

  {

  ptr_LinkList linklist;

  ptr_LinkList list;

  linklist=CreateList();

  if(linklist)

  {

  printf("We have created a new linklist.\n");

  }

  InsertListHead(linklist,12);

  InsertListHead(linklist,35);

  InsertListHead(linklist,66);

  InsertListHead(linklist,06);

  InsertListHead(linklist,11);

  InsertListHead(linklist,54);

  InsertListHead(linklist,79);

  Traverse(linklist);

  printf("\n");

  printf("The first method:\n");

  list=InvertList(linklist);

  Traverse(list);

  printf("\n");

  printf("The second method:\n");

  InvertLinkList(linklist);

  Traverse(linklist);

  printf("\n");

  getch();

  return 0;

  }

  9C++常用字符串分割方法实例汇总

【C语言数据结构实现链表逆序并输出】相关文章:

C语言链表逆序方法技巧01-27

链表的C语言实现方法12-10

链表的C语言实现方法编程学习02-22

c语言链表的用法03-10

c语言链表的用法有哪些01-24

C#数据结构之循环链表的实例代码03-15

C语言输出菱形的方法08-15

C语言怎样输出菱形01-01

C语言如何输出菱形01-27