有一个整数单链表L,设计一个算法逆置L中的所有节点。直接把代码给我
```python
class Node:
def __init__(self,data):
self.data = data
self.next = None
def createByTail(a):
head = Node(-1)
tail = head
for i in range(len(a)):
p = Node(a[i])
tail.next = p
tail = p
return head
def output(head):
p = head.next
while p!=None:
if p!= head.next:
print(' ',end='')
print(p.data,end='')
p = p.next
print()
def reverse(head):
p = head.next
head.next = None
while p != None:
q = p
p = p.next
q.next = head.next
head.next = q
if __name__ == '__main__':
T = int(input())
for t in range(T):
a = list(map(int,input().split()))
a = a[:len(a)-1]
h = createByTail(a)
reverse(h)
output(h)
```
class Node:
def __init__(self,data):
self.data = data
self.next = None
def createByTail(a):
head = Node(-1)
tail = head
for i in range(len(a)):
p = Node(a[i])
tail.next = p
tail = p
return head
def output(head):
p = head.next
while p!=None:
if p!= head.next:
print(' ',end='')
print(p.data,end='')
p = p.next
print()
def reverse(head):
p = head.next
head.next = None
while p != None:
q = p
p = p.next
q.next = head.next
head.next = q
if __name__ == '__main__':
T = int(input())
for t in range(T):
a = list(map(int,input().split()))
a = a[:len(a)-1]
h = createByTail(a)
reverse(h)
output(h)
http://t.csdn.cn/NKcnO
代码在这里面,有解析与用法,有帮助记得采纳
class Node:
def __init__(self,data):
self.data = data
self.next = None
def createByTail(a):
head = Node(-1)
tail = head
for i in range(len(a)):
p = Node(a[i])
tail.next = p
tail = p
return head
def output(head):
p = head.next
while p!=None:
if p!= head.next:
print(' ',end='')
print(p.data,end='')
p = p.next
print()
def reverse(head):
p = head.next
head.next = None
while p != None:
q = p
p = p.next
q.next = head.next
head.next = q
if __name__ == '__main__':
T = int(input())
for t in range(T):
a = list(map(int,input().split()))
a = a[:len(a)-1]
h = createByTail(a)
reverse(h)
output(h)
//将整个链表逆序(带表头节点)
if (head->next!=NULL && head->next->next!=NULL) {
p=head->next;
q=p->next;
p->next=NULL;
while (1) {
q1=q->next;
q->next=p;
p=q;
q=q1;
if (NULL==q) break;
}
head->next=p;
}
//将整个链表逆序(不带表头节点)
p=head;
if (p) q=p->next;
if (q) {
p->next=NULL;
while (1) {
q1=q->next;
q->next=p;
p=q;
q=q1;
if (NULL==q) break;
}
head=p;
}
可以使用迭代或递归的方法来逆置单链表。
迭代方法:
初始化当前节点为单链表的头节点,并将前一个节点设置为NULL。
将当前节点的下一个节点设置为前一个节点。
将前一个节点设置为当前节点。
将当前节点设置为当前节点的下一个节点。
重复步骤2-4,直到当前节点为NULL。
struct Node
{
int data;
Node* next;
};
Node* reverse(Node* head)
{
Node* current = head;
Node* prev = NULL;
while (current != NULL)
{
Node* next = current->next;
current->next = prev;
prev = current;
current = next;
}
return prev;
}
递归方法:
如果单链表为空或者只有一个节点,则返回头节点。
否则,递归地逆置剩余部分的所有节点。
将当前节点的下一个节点设置为当前节点。
将当前节点设置为递归调用返回的节点。
struct Node
{
int data;
Node* next;
};
Node* reverse(Node* head)
{
if (head == NULL || head->next == NULL)
{
return head;
}
Node* reversed = reverse(head->next);
head->next->next = head;
head->next = NULL;
return reversed;
}