1.单链表反转
2.找出单链表的倒数第4个元素 3.找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并
6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。
7.单链表交换任意两个元素(不包括表头)
2.找出单链表的倒数第4个元素 3.找出单链表的中间元素 4.删除无头单链表的一个节点 5.两个不交叉的有序链表的合并
6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。写程序把这个二级链表称一级单链表。
7.单链表交换任意两个元素(不包括表头)
8.判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?
9.判断两个单链表是否相交
10.两个单链表相交,计算相交点 11.用链表模拟大整数加法运算 12.单链表排序13.删除单链表中重复的元素
#include<iostream>
using namespace std;
struct Node
{
int data;
Node*next;
};
void CreateList(Node*&head)
{
Node*p,*s;
s= new Node;
cin>>s->data;
while(s->data !=0)
{
if(head == NULL) {head = s;p = head;}
else
{
p ->next= s;
p = s;
s = new Node;
cin>>s->data;
}
}
delete s;
s = NULL;
p->next = NULL;
}
void ShowList(Node*&head)
{
Node*temp = head;
while(temp!=NULL)
{
cout<<temp->data<<" ";
temp = temp->next;
}
cout<<endl;
temp = NULL;
}
void ReveaseList(Node*&head)
{
if(head==NULL) return;
Node*p = head;
Node*temp;
while(head != NULL)
{
if(p==head) {head = head->next;p->next = NULL;continue;}
temp = head;
head = head ->next;
temp ->next = p;
p = temp;
}
head = p;
p = NULL;
temp = NULL;
}
void DestroyList(Node*&head)
{
Node*temp;
while(head!=NULL)
{
temp = head;
head = head ->next;
delete temp;
}
temp = NULL;
head = NULL;
}
void FindDecfourth(Node*&head)
{
int i = 0;
Node*p = head;
bool flag = true;
while(i<3)
{
if(p==NULL) {flag = false;break;cout<<"here"<<endl;}
p = p->next;
i++;
}
if(p==NULL) flag = false;
if(flag)
{
Node*pt = head;
while(p->next!=NULL)
{
pt = pt->next;
p = p->next;
}
cout<<"the fourth node'data is "<<pt->data<<endl;
pt = NULL;
}
else
cout<<"NO fourth Node"<<endl;
p = NULL;
}
void FindMiddleNode(Node*&head)
{
bool flag = true;
Node*p = head,*pt = head;
Node*temp =p;
while(pt ->next!=NULL)
{
pt = pt->next;
pt = pt->next;
temp = p;
p = p->next;
if(pt==NULL) {flag = false;break;}
}
if(flag) cout<<"Middle Number: "<<p->data<<endl;
else cout<<"Middle Number: "<<temp->data<<" "<<p->data<<endl;
p = NULL;
pt = NULL;
temp = NULL;
}
int main(){
Node*head = NULL;
CreateList(head);
ShowList(head);
ReveaseList(head);
ShowList(head);
FindDecfourth(head);
FindMiddleNode(head);
DestroyList(head);
}