回 帖 发 新 帖 刷新版面

主题:链表的问题

本人刚刚接触数据结构,由于C语言还没有学玩,所以对一些基础问题非常混沌,向高手求教。
    1、对输入的一批数据用尾插法建立一带表头结点的单向线性链表, 输出该链表的数据,仅对单向线性链表进行处理,在不建立新链表的前提下,使原链表中的数据结点逆序,输出处理后的链表数据。
    2、实现仅带尾结点指针单向循环链表的建立、插入、删除、查找操作算法。
    3、对两个带表头结点的单向线性链表按结点数据域分别进行递增排序,然后归并成一个链表。

回复列表 (共3个回复)

沙发

#include <iostream.h>
typedef int ElemType;
struct LinkList
{
    ElemType data;
    LinkList *next;
};
#define EndMark -9999
LinkList *CreateLinkList()
{
    ElemType value;
    LinkList *head, *newnode,*last;
    last=head=new LinkList;
    cout<<"please"<<endl;
    cin>>value;
    while(value!=EndMark)
    {
        newnode=new LinkList[1];
        newnode->data=value;
        last->next=newnode;
        last=newnode;
    cout<<"please"<<endl;
        cin>>value;
    }
    last->next=NULL;
    return head;
}
void printLinkList(LinkList *head)
{
    LinkList *p=head;
    while(p!=NULL)
    {
       cout<<p->data<<endl;
       p=p->next;
    }
}



void main()
{
   LinkList *h;
   h=CreateLinkList();
   printLinkList(h);
}

这是我写的建立和打印的程序 就是倒序不怎么会 求教

板凳

将最后一个节点提出来,用头插法插入链表中,直到最后的节点是原先的第一个节点

3 楼


LinkList  ReverseList( LinkList  head  )
{
    // 将head 所指的单链表逆置
    ListNode *p  ,*q ;//设置两个临时指针变量
        if( head->next && head->next->next)
    {    
        //当链表不是空表或单结点时
        p=head->next;
        q=p->next;
        p -> next=NULL;    //将开始结点变成终端结点

        while (q)
        {        //每次循环将后一个结点变成开始结点
            p=q;    
            q=q->next ;
            p->next = head-> next  ;
            head->next = p;
        }
        return head;
    }
    return head;    //如是空表或单结点表,直接返回head
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册