数据结构——关于链表的几个重要函数

数据结构——关于链表的几个重要函数

关于链表的几个重要函数

1. 在单向链表的尾部添加一个节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void tail(Node**head,int x){//在头节点为head的链表的尾部插入一个值为x的节点
Node*newnode=new Node();//为新节点开辟一个空间
newnode->data=x;//将数据x存放在新节点中
newnode->next=NULL;//将新节点的next设为空
if(*head==NULL){//如果链表为空
*head=newnode;//新节点就为头节点
}
else{
Node*temp=*head;
while(temp->next!=NULL){
temp=temp->next;//移动到最后一个节点
}
temp->next=newnode;
}
}

2. 打印指定的链表

1
2
3
4
5
6
7
8
void Print(Node*head){//指定链表的打印函数
Node*temp=head;
while(temp!=NULL){
cout<<temp->data<<" ";
temp=temp->next;
}
cout<<endl;
}

3. 反转链表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void Reverse(Node**head){//指定链表的反转
Node*current,*prev,*next;//分别表示当前位置,前一位置,下一位置
current=*head;//设定当前位置为头节点
prev=NULL;//前一位置为空
while(current!=NULL){
next=current->next;//将下一节点的地址存入next
current->next=prev;//将前一节点的地址赋给当前节点的next
prev=current;//后移
current=next;//后移
}
*head=prev;//最后一个循环将末尾节点地址赋给了prev
}
void Reverse() {//全局链表的反转
Node* prev, * current, * next;
current = head;
prev = NULL;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
}