題目:找到單向鏈表中間的那個元素,如果有兩個則取前面一個。
答案:
#include <iostream>
using namespace std;

typedef struct node


{
int value;
node* next;
}Lnode,*Pnode;


int find_mid(Lnode* head)


{
Lnode* pre,*curr;
curr = head;
pre = head;
int i = 1;

for (;curr != NULL; curr = curr->next)

{
if (i%2 == 0)

{
pre = pre->next;
}
i ++;
}
return pre->value;

}
//有頭結(jié)點
int main()


{
Lnode* head = new Lnode;
head->next = NULL;
Lnode* nod = head;
int val;

cout << "輸入數(shù)據(jù)(int類型,以0結(jié)束): ";
cin >> val;

while (val != 0)

{
Lnode* curr = new node;
curr->value = val;
curr->next = NULL;
nod->next = curr;
nod = nod->next;

cin >> val;
}

cout << "鏈表數(shù)據(jù)為:";
for (Lnode* pre = head->next;pre!=NULL;pre=pre->next)

{
cout << pre->value <<" ";
}
cout << endl;

cout << "中間的數(shù)是:" << find_mid(head) << endl;

return 0;
}
答案:
#include <iostream>
using namespace std;
typedef struct node 

{
int value;
node* next;
}Lnode,*Pnode;

int find_mid(Lnode* head)

{
Lnode* pre,*curr;
curr = head;
pre = head;
int i = 1;
for (;curr != NULL; curr = curr->next)
{
if (i%2 == 0)
{
pre = pre->next;
}
i ++;
}
return pre->value;
}
//有頭結(jié)點
int main()

{
Lnode* head = new Lnode;
head->next = NULL;
Lnode* nod = head;
int val;
cout << "輸入數(shù)據(jù)(int類型,以0結(jié)束): ";
cin >> val;
while (val != 0)
{
Lnode* curr = new node;
curr->value = val;
curr->next = NULL;
nod->next = curr;
nod = nod->next;
cin >> val;
}
cout << "鏈表數(shù)據(jù)為:";
for (Lnode* pre = head->next;pre!=NULL;pre=pre->next)
{
cout << pre->value <<" ";
}
cout << endl;
cout << "中間的數(shù)是:" << find_mid(head) << endl;
return 0;
}

